【1】空struct是0,而空类是1的原因
struct Data{ }; struct Data data(变量); sizeof(Data)=0;
- struct类型,在C语言中,是定义结构体。data只需要开辟内存就可以了
class/struct Data{ }; Data data(对象); sizeof(Data)=1;
- struct在c++中,也是定义类的。和class的区别是:class定义的类默认是私有的,而struct定义的默认是公有的
作为对象的data来说
- 1.开辟内存
- 2.调用合适的构造函数CGoods(CGoods *this)
构造函数:对象的初始化
析构函数:释放对象占用的外部资源
【2】指针和引用有什么区别
- 定义指针时,不需要初始化 定义引用一定要初始化
- 指针必须解引用 引用变量是自动解引用的
- 可以定义多级指针 引用只能有一级
- 引用比指针更安全
【3】在代码上如何解决浅拷贝问题
- 1.提供自定义的拷贝构造函数和赋值重载函数
- 2.拷贝构造函数和赋值重载函数声明成private的
【4】对象的拷贝构造函数,能不能按值接收?
- 不能。从逻辑的角度来说,因为参数的传递本身就是拷贝。如果不使用引用类型,拷贝构造函数传递参数时又会调用拷贝构造函数,造成循环调用。
【5】构造函数的初始化列表
- 构造函数之前执行的,专门给当前对象的成员变量指定初始化方式的
- 初始化列表中指定的初始化,其初始化顺序和定义的顺序有关,和他们在列表中出现的先后顺序无关
eg:
class CText{
public:
CText(int b=20):_b(b),_a(_b)// 如果按照这里初始化顺序,则结果为 20 20
{} //可是最后打印出来的a是随机值,b是20。说明是先初始化a,后初始化b
void show()
{
cout << _a<<"======"<< _b << endl;
}
private:
int _a;
int _b;
};
int main()
{
CText t;
t.show();
}