C++ part5

为啥大三了课少了一点点,做作业的时间反而多了一大堆堆???

关于protect

只能被本类或者子类的成员函数,或者友元函数访问。

友元函数:

#include <iostream>
#include <vector>
using namespace std;

class A{
public:
    A() : f(3){}
    friend void get(const A &a);    //声明友元函数
private:
    int f;
};

void get(const A &a){
    cout << a.f << endl;
}
int main() {
    A a;
    get(a); //3
    return 0;
}

C++类内定义引用数据成员

references:
c++之类内定义引用成员

1、不能用默认构造函数初始化,必须提供构造函数来初始化引用成员变量。否则会造成引用未初始化错误。
2、构造函数的形参也必须是引用类型
3、不能在构造函数里初始化,必须在初始化列表中进行初始化。
简称:必须使用构造函数初始化列表初始化。

class A{
public:
    A(int &ff) : f(ff){}
private:
    int &f;
};

struct和class的区别

references:
C++的继承权限

nowcoder

struct默认继承权限和访问权限为public,class默认继承权限和访问权限为private。

什么是右值引用,跟左值又有什么区别?

references:
从4行代码看右值引用

nowcoder

解决的问题:
右值引用是C++11中引入的新特性 , 它实现了转移语义和精确传递。它的主要目的有两个方面:
1. 消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。
2. 能够更简洁明确地定义泛型函数。

概念:
左值:能对表达式取地址、或具名对象/变量。一般指表达式结束后依然存在的持久对象。
右值:不能对表达式取地址,或匿名对象。一般指表达式结束就不再存在的临时对象。

左值右值区别:
1、左值能寻址,右值不能
2、左值能赋值,右值不能

另:
T&& t在发生自动类型推断的时候(如函数模板的类型自动推导,或auto关键字),它是未定的引用类型,如果被一个左值初始化,它就是一个左值;如果它被一个右值初始化,它就是一个右值,它是左值还是右值取决于它的初始化。
常量左值(const int& a = get())引用能够绑定一个右值。

template<typename T>
void get(T &&a){

}
int main() {
    int a = 1;
    get(a);
    get(1);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/KirinSB/p/12507393.html