0%

C++易错概念

构造函数

构造函数不能定义为虚函数

构造器的执行过程分为两个阶段:初始化普通计算

class Demo {
public:
int value1;
int value2;

Demo(int v1, int v2):value2(v2), value1(v1) { // 初始化
// 普通计算
}
}

初始化阶段中,不在初始化列表的对象执行默认的初始化方法,在初始化列表中的尘缘执行指定的构造方法。在普通计算阶段,也可对初始过的成员变量再做修改。

class Demo {
public:
int value1;
int value2;

Demo(): value1(1), value2(value1) {} //错误
}

初始化阶段不一定顺序执行成员初始化,不能使用某个成员初始化其他成员。

拷贝构造/复制构造函数

CLASS_NAME(const CLASS_NAME&); // const可选

如果类没有显式声明一个拷贝构造函数,那么,编译器会自动生成一个进行对象之间非static成员的拷贝

拷贝函数的调用场景:

  • 对象作为函数参数,值传递
  • 对象作为函数返回值,以值传递的形式返回
  • 对象用于给另外一个对象初始化(赋值初始化)

析构函数:如果没有定义,编译器会提供一个默认的析构函数

类的静态成员:静态成员变量一般要在类外初始化(即使是private)。类的静态方法不能直接访问类的静态成员变量,而类的任何成员函数都能访问类的静态成员。

友元:友元允许特定非成员函数访问一个类的私有成员。友元会破坏类的封装。
可以声明友元类和友元函数。

Disqus评论区没有正常加载,请使用科学上网