- 构造函数的名称与类名相同。
- 构造函数没有返回类型,即使是void也没有。
- 构造函数用于创建对象时初始化对象的成员变量。
- 如果我们没有显式定义构造函数,则编译器会为我们提供一个缺省构造函数。该缺省构造函数的函数体为空,用于创建不带任何参数的对象。
- 构造函数不能被继承,因此没有父类或子类的概念。
- 如果我们定义了自己的构造函数,则默认构造函数将不会被创建
- 构造函数可以是private、public或protected,通常为public,以便在任何地方都可以创建类的对象。但如果希望只有类的成员函数或友元函数可以创建对象,那么可以将构造函数设为private或protected。
- 构造函数可以使用逗号分隔的初始化列表来初始化类的成员变量,需要注意的是,初始化列表中的成员变量顺序应该与类定义中的成员变量顺序一致,否则可能会导致未定义的行为。此外,如果某个成员变量没有在初始化列表中进行初始化,那么编译器将使用默认构造函数来初始化该成员变量。
class MyClass {
public:
MyClass(int a, double b) : member1(a), member2(b) {}
private:
int member1;
double member2;
};
9 如果成员变量的类型是引用类型或常量类型,那么必须使用初始化列表语法进行初始化,否则将会导致编译错误。
class MyClass {
private:
int& ref_member; // 引用类型的成员变量
const double const_member; // 常量类型的成员变量
public:
MyClass(int a) : ref_member(a), const_member(a * 2) {}
};
10 一旦有了一个构造函数,编译器就会确保不管在什么情况下它总会被调用。
class Y {
int i;
public:
Y(int A){i=A};
}
Y y;//编译错误