一直对构造函数的使用模模糊糊,刚刚根据参考,编了几个小例子,算理解了一点,在此记下以备后忘。
目前了解的构造函数有三类,无参的构造函数一种,有参构造函数两种:
class testclass
{
public:
testclass();
testclass(testclass &T);
testclass(const testclass &T);
~testclass();
void seta(int x);
int showme();
private:
INT a;
};
类中写了三种构造函数,每个构造函数和辅助显示函数的实现如下:
testclass::testclass()
{
cout<<"无参数构造函数"<<endl;
}
testclass::testclass(testclass&T)
{
a=T.a;
T.a=-100;
cout<<"构造函数传递非静态对象参数:"<<this->a<<endl;
}
testclass::testclass(const testclass&T)
{
a=T.a;
cout<<"构造函数传递静态对象参数"<<this->a<<"\n";
}
void testclass::seta(int x)
{
a=x;
return;
}
testclass::~testclass()
{
}
int testclass::showme()
{
cout<<"现在的a值"<<this->a<<"\n";
return 0;
}
测试例如下:
int main(int argc, char* argv[])
{
int num=10;
testclass TC;
TC.seta(num);
TC.showme();
testclass TC2(TC);
TC2.showme();
TC.showme();
testclass TC3(TC);
TC3.showme();
cout<<"HENHAO!"<<"\n";
getch();
return 0;
}
运行的结果如下:
无参数构造函数
现在的a值10
构造函数传递非静态对象参数:10
现在的a值10
现在的a值-100
构造函数传递非静态对象函数:-100
现在的a值-100
HENHAO!
从以上结果可以看出,构造函数
testclass::testclass(const testclass&T)
{
a=T.a;
cout<<"构造函数传递静态对象参数"<<this->a<<"\n";
}
没有被调用,那么什么时候它才发挥作用呢?如果注释掉构造函数testclass(testclass &T)显示结果如下,可以看到此时构造函数testclass(const testclass&T)被调用
无参数构造函数
现在的a值10
构造函数传递静态对象参数10
现在的a值10
现在的a值10
构造函数传递静态对象参数10
现在的a值10
HENHAO!
由此推测当两个拷贝构造函数同时存在是,非静态参数的构造函数优先级要高于静态参数的构造函数。
本文通过实例解析构造函数的三种类型及其优先级,包括无参数构造函数、有参数构造函数,以及它们在不同情况下的应用。通过具体代码演示,展示了构造函数如何根据参数类型选择性地被调用,提供了深入理解构造函数机制的实用指南。
2792

被折叠的 条评论
为什么被折叠?



