在C++ 中有构造函数和析构函数,是类特殊的成员函数。
构造函数:
创建对象时,根据规则自动执行。
1.函数名与类名相同,属性为public。
2.功能是对对象初始化,所以只能对class的数据成员初始化。
3.无返回类型,但不要写void 。
4,可以不定义构造函数,此时默认的构造函数为空,什么事情都不做
5.可以有多个构造函数,则此时根据参数类型来确定执行那个构造函数。
6.默认参数的构造函数,则可以缺省配置,但如果有多个构造函数时,容易引起二义性,程序报错。
析构函数:
析构函数与构造函数相反,是为了在对象生成期结束前自动执行,做数据的清理工作,如new的内存空间,需要delete掉。
1.名字为~+class name 属性为public
2.一个类只有一个析构函数。
3.没有定义时,默认析构函数为null,不做任何工作。
拷贝构造函数和默认拷贝构造函数。
对象是一个复杂的数据类型,C++中也能够将对象赋值到另外一个对象,或者用已知对象去创建另一一个对象。
对象直接的赋值或者创建则是调用了拷贝构造函数来完成的。
如CDate day1(1999,1,1),day2;
day2=day1;
CDat3 day3(day1);
fun(CDate day);
c++中三种情况会用到拷贝函数。
1.如对象直接赋值或者对象创建对象时。
2.对象作为函数形参时,函数执行过程中。
3.对象作为函数返回值类型
如果未定义拷贝构造函数,则是默认的拷贝构造函数中将数据的内存全部拷贝。
如果用户定义了拷贝构造函数,则是调用用户定义的构造函数。
代码调试:
#include
using namespace std;
class CComplex
{
public:
CComplex(double,double);
CComplex(CComplex &c);
CComplex add(CComplex &x);
void print();
~CComplex();
private:
double real;
double imag;
};
CComplex::CComplex(double x=0.0,double y=0.0)
{
cout<<"CComplex:"<
real=x;
imag=y;
}
CComplex::CComplex(CComplex &c)
{
cout<<"CComplex::"<
real= c.real;
imag=c.imag;
}
void CComplex::print()
{
cout<<"print"<
cout<<"("<
}
CComplex CComplex::add(CComplex &x)
{
CComplex y(real+x.real,imag+x.imag);
return y;
}
CComplex::~CComplex()
{
cout<<"~CComplex"<
}
int main(void)
{
CComplex a(3.2,4.3),b(5.6,7.8);
a.print();
CComplex c(b);
c.print();
CComplex d=a;
d.print();
CComplex e;
e=a.add(b);
e.print();
return 0;
}
CComplex:
CComplex:
print
(3.2,4.3)
CComplex::
print
(5.6,7.8)
CComplex::
print
(3.2,4.3)
CComplex:
CComplex:
~CComplex
print
(8.8,12.1)
~CComplex
~CComplex
~CComplex
~CComplex
~CComplex
阅读(2377) | 评论(0) | 转发(0) |