复习c++第一弹

对象的赋值。

#include <iostream>

using namespace std;

	class Sample
	{
	public:
	Sample(){}
	Sample(int a){x=a;}
	Sample(Sample &a){x=a.x++;}
	void disp(){cout<<x++;}
	private:
	int x;
	};


	void fun(Sample &s1, Sample s2) {
	s1.disp ();s2.disp ();
	}
	int main()
	{
	Sample s1(2),s2=s1;
    fun(s2,s1);
	s1.disp ();
	s2.disp ();
	}

若类中没有析构函数,则类的两个对象的赋值,为直接赋值,分别令其数据成员相等即可。

若有对应匹配的构造函数,则调用构造函数进行赋值。
此题注意s1,s2实参和形参顺序不一致。
s1.x初始化为3
s2.x初始化为2
进入fun语句。 s2为引用传递,即形参为s2的别名,调用disp后s2实参的值也对应发生变化,s2.x=3.s1为值传递。调用构造函数赋值,因此s1本身又加1,s1.x=4,而形参的x的3。
输出 2 3
然后 s1输出 4
s2输出3
答案 2343

例题2 析构函数
#include

using namespace std;

class Sample
{
int x;
public:
Sample(){x=0;}
Sample(int a) {cout<<(x=a);}
~Sample()
{
cout<<++x;
}
void disp()
{
cout<<x;
}
};

int  main()
{
	Sample s1(2);
	s1.disp ();
	s1.~Sample ();
	s1.disp();
}

手动调用析构函数,对象不销毁内存空间(非new创建的对象)
浅拷贝(位拷贝)和深拷贝
浅拷贝:即简单的将实参的数据成员复制给了形参,二者各占独立的空间。
深拷贝:通过构造函数来实现,通常将构造函数的形参设为const避免被改变,

c++默认参数特点:
1、当函数既有原型声明又有定义的时候,默认参数就只能在原型声明中定义。
2、在函数原型中,所有带默认值得参数都必须出现在没有默认值的右边,也就是一开始定义带有默认值的参数,后边就不能再定义没有默认值得参数。
3、不循序某个参数省略后,再给其后的参数指定参数值。
例如 Complex(,9,6)是错误的
和特点2 刚刚好反着来。
毕竟左边可能会没有默认参数,所以左边一定要有实参进去。
4、避免二义性
在函数重载中会涉及

猜你喜欢

转载自blog.csdn.net/cruel2436/article/details/84494588