📅  最后修改于: 2023-12-03 15:13:45.111000             🧑  作者: Mango
构造函数是在创建对象时调用的函数,它的主要作用是对对象进行初始化。C++中,默认会提供一个无参的构造函数,如果用户定义了构造函数,则默认提供的构造函数就不再起作用。
在使用构造函数时,有一些问题需要注意:
在某些特殊情况下,可能需要在析构函数中调用构造函数。这是不被允许的,因为会导致对象被重复创建。
在类中,可以使用初始化列表对成员变量进行初始化。例如:
class Test{
int a;
public:
Test(int i){
a = i;
}
};
上面的代码中,a的初始化采用了先赋值再初始化的方式,这样做的问题是,如果a像下面这样定义:
class Test{
int a;
int b;
public:
Test(int i){
a = i;
}
};
当b没有被初始化时,它的值是不确定的。这时,就需要使用初始化列表:
class Test{
int a;
int b;
public:
Test(int i): a(i), b(0) {} // 初始化a和b
};
静态成员变量是该类的所有对象所共有的,它的初始化需要特别注意。可以将静态成员变量初始化放在类声明中,也可以放在类外部进行。
class Test{
static int a; // 静态成员变量声明
public:
Test(int i){
a = i;
}
};
int Test::a = 0; // 静态成员变量初始化
#include <iostream>
using namespace std;
class Test{
int a;
int b;
static int c; // 静态成员变量声明
public:
Test(int i): a(i), b(0) {} // 初始化a和b
int getA(){ return a; }
int getB(){ return b; }
static int getC(){ return c; }
};
int Test::c = 999; // 静态成员变量初始化
int main()
{
Test t(10);
cout << "a = " << t.getA() << endl; // a = 10
cout << "b = " << t.getB() << endl; // b = 0
cout << "c = " << Test::getC() << endl; // c = 999
return 0;
}
在使用构造函数时,需要注意一些问题,特别是对成员变量进行初始化的问题。对于静态成员变量的初始化,可以在类声明中进行,也可以在类外部进行。