类的构造函数和析构函数
构造函数在类中声明的一种特殊的成员函数
——与所属类名相同
——无返回值
——创建对象时有系统自动调用
——被声明为公有函数
——由new运算符动态创建对象系统自动调用
具有一般成员函数所有的特性
可以访问类的所有数据成员
可以是内联函数
可以无参 可以带参:定义有参的时候 是可以设置形参默认值的
可以重载:一个类 中构造函数可以有多个 以便针对对象不同的特性进行初始化
1)
#include <instream.h>
class CMyclass
{
int a,b;
public:
CMyclass(int x=3,int y=3)
//设置了默认参数
{
a=x;b=y;
}
.....
};
//对于带默认参数的构造函数 函数声明写在类的里面 函数实现写在类的外面的时候 一定要把它的**初始值**放在**类的内部**来写
CMyclass c1(2,4);
CMyclass c2(4);
CMyclass c3;
只有调用构造函数才能完成对象的初始化
如果用户未定义构造函数 调用西东提供的缺省构造函数
<类名>::<缺省构造函数名>(){ }
一个类只有一个缺省的构造函数
[Example] 当调用无参构造函数时
CMyclass c1;//正确
CMyclass c2();//错误
理解:实例化类的对象要调用构造函数 对于错误的那个理解为是对c2函数来进行声明 这个函数不带参 返回类型是CMyclass
所以存在二义性 你可以理解为是构造类的对象 也可以理解为是函数的声明
故为了避免二义性 不要写括号
2)
比较不错的例子
#include <instream.h>
class CMyclass
{
int a,b;
public:
CMyclass()
{
}
CMyclass(int x=3,int y=3)
//设置了默认参数
{
a=x;b=y;
}
.....
};
//定义类对象
CMyclass c2(2,4);
CMyclass c;
//同样具有二义性 是调用无参构造函数还是调用存在缺省值的构造函数呢?
//故具有二义性
另外显示调用构造函数注意调用的正确方法(语法要求) 这在析构函数一节写了。
——————————————————————————
复制构造函数:利用已经生成的一个类对象对将要生成的一个类对象进行初始化
int a1=0;
int a2(a1); //a2=a1 C++特殊语法
CMyclass obj1;
CMyclass obj2(obj1