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对象然后匿名对象会被析构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值