类与对象完结

1.匿名类

先看一个例子

class A
{
public:
	A(int a = 0)
		:_a(a)
	{
		cout << "A(int a)" << endl;

	}
	~A()
	{
		cout << "~A()" << endl;
	}
	void Print()
	{
		cout << _a << endl;
	}
private:
	int _a;
};

int main()
{
	A aa1(10);
	aa1.Print();
	A(20).Print();//匿名类
	return 0;
	
}

aa1就是就是有名类,如果我们直接给一个类进行构造就是匿名类

我们这么定义匿名对象,匿名对象的特点不用取名字, 但是他的生命周期只有这一行,我们可以看到下一行他就会自动调用析构函数。
2.编译器的优化
class A
{
public:
	A(int a = 0)//默认构造
		:_a(a)
	{
		cout << "A(int a)" << endl;
	}
	A(const A& aa)//拷贝构造
		:_a(aa._a)
	{
		cout << "A(const A& aa)" << endl;
	}
	
		A& operator=(const A& aa)//赋值重载
	{
		cout << "A& operator=(const A& aa)" << endl;
		if (this != &aa)
		{
			_a = aa._a;
		}
		return *this;
	}
	~A()//析构函数
	{
		cout << "~A()" << endl;
	}
private:
	int _a; 
};
void f1(A aa)
{
}
A f2()
{
	A aa;
	return aa;
}
int main()
{
	// 传值传参  aa1先进行构造 然后传值的话要拷贝构造
	A aa1;
	f1(aa1);
	cout << endl<<endl;
	
	// 传值返回
	f2();  //传值返回 f2里面的类先进行构造,返回的话要一份临时变量的拷贝
	//编译器直接优化成就直接返回构造好的,直接就是构造
	cout << endl << endl;

	// 隐式类型,连续构造+拷贝构造->优化为直接构造
	f1(1);
	cout << endl << endl;

	// 一个表达式中,连续构造+拷贝构造->优化为一个构造
	f1(A(2));//匿名函数进行构造之后 传值拷贝要进行拷贝构造
	cout << endl << endl;

	// 一个表达式中,连续拷贝构造+拷贝构造->优化一个拷贝构造
	A aa2 = f2();
	cout << endl << endl;

	// 一个表达式中,连续拷贝构造+赋值重载->无法优化
	aa1 = f2();//但是我们在f2里面已经优化成了构造,所以是构造加上赋值重载
	cout << endl << endl;
	return 0;
}

讲解在上面的代码区

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值