构造函数
构造函数是一个与类同名,没有返回值的特殊成员函数。一般用于初始化类的数据成员,每当创建一个对象时(包括使用new动态创建对象),编译系统就自动调用构造函数。构造函数既可在类外定义,也可作为内联函数在类内定义。
例:
class qq class qq
{ {
int q[20]; int q[20];
int i,j; int i,j;
public: public:
qq(); qq();
{ int qget();
i=j=0; };
cout<<"调用构造函数"<<endl; qq::qq()
} {
int qget(); i=j=0;
}; cout<<"调用构造函数"<<endl;
}
(以上两种方式等价)
带默认参数的构造函数
只要一个类定义了一个构造函数,c++语言就不再提供默认的构造函数。如果为类定义了一个带参数的构造函数,还想要使用无参构造函数,则必须自己定义。
默认构造函数示例:
qq(int q=5,int w=4)
{
i=q;
j=w;
}
初始化列表的方式:
class Person {
public:
传统方式初始化
//Person(int a, int b, int c) {
// m_A = a;
// m_B = b;
// m_C = c;
//}
//初始化列表方式初始化
Person(int a, int b, int c) :m_A(a), m_B(b), m_C(c) {}
void PrintPerson() {
cout << "mA:" << m_A << endl;
cout << "mB:" << m_B << endl;
cout << "mC:" << m_C << endl;
}
private:
int m_A;
int m_B;
int m_C;
};
构造函数的调用
括号法: Student p1(10);
显示法: Student p2(10)=Student(10);
隐式转换法 :Student p3=10;
注意:
调用无参构造函数时,不能加括号,加了编译器会认为时一个函数声明
不能利用拷贝构造函数初始化匿名对象,编译器会认为是对象的声明
Student (p4) = Student p4;