C++构造函数的几种使用
Test测试类以及所用全局函数
class Test
{
public:
Test()
{
m_a = 0;
m_b = 0;
cout << "我是无参构造函数" << endl;
}
Test(int a)
{
m_a = a;
m_b = 0;
}
Test(int a, int b) //有三种调用方法;
{
m_a = a;
m_b = b;
cout << "我是有参数构造函数" << endl;
}
Test(const Test & obj)//用一个对象去初始化另一个对象;
{
cout << "我是赋值构造函数" << endl;
}
protected:
private:
int m_a;
int m_b;
};
void f(Test p)
{
cout << "Hello world" << endl;
}
Test g()
{
Test a(2);
return a;
}
使用无参数构造函数
void main()
{
Test t1;
system("pause");
}
在创建t1对象是,c++编译器隐式的调用了无参构造函数。
使用有参数构造函数
void main()
{
Test t2(1, 2);
Test t3 = (3, 4);
Test t4 = 5;
system("pause");
}
t2对象在初始化时c++编译器会调用有两个参数的构造函数,t3对象对象由于后边的逗号表达式的值为4,所以C++编译器会调用有一个参数的构造函数,t4对象和t3对象道理相同。
使用copy构造函数
void main()
{
Test t1(1, 2);
Test t5(t1);
Test t6 = t1;
f(t1);
Test t7 = g();
t7 = g();
system("pause");
}
t5对象的初始化时c++编译器会调用copy构造函数,t6对象是 = 运算符重载,和t5对象类似,使用 f(t1) 函数时会创建一个p对象,这时c++编译器会调用copy构造函数,t7对象在初始化时会调用 g() 函数,g() 函数会创建一个局部对象a,在函数结束时需要将a对象返回,这是c++编译器会创立一个匿名对象来保存a的数据,如 Test t7 = g() 这一调用方式,c++编译器会直接把匿名对象转正,即给匿名对象命名为t7,而 t7 = g() 这种调用方法会先将匿名对象的数据赋值给t7对象然后匿名对象会被析构。