您的位置:首页 > 编程语言 > C语言/C++

c++中的构造函数

2015-09-24 16:48 274 查看
在c++中,类是对对象抽象了的一个模板,它不具有具体的数值,是一种数据结构,系统不给它分配空间,当我们初始化一个对象时,就需要用到构造函数了。

一、构造函数的特点:

1、名字与类名相同

2、可以是任何数据类型,但是没有返回值

3、系统自动调用构造函数

4、一个类可以定义多个构造函数

5、带默认参数值的构造函数

二、复制构造函数:建立一个新的对象时,用已有的对象去初始化新的对象

下面给出几个例子:

#include<iostream>

using namespace std;

class Desk
{
private:
int kuan;
int chang;
public:
Desk(int k=0,int c=0) :kuan(k), chang(c)//初始化列表
{
kuan = k;
chang = c;
}

void Disp();
};

void Desk::Disp()
{
cout << chang << ' ' << kuan << endl;
}

int main()
{
Desk d1;
d1.Disp();
Desk d2(1,4);
d2.Disp();
for (;;){}
return 0;
}


#include<iostream>

using namespace std;

class Desk
{
private:
int kuan;
int chang;
public:
Desk();
~Desk();
void set(int x,int y);
void Disp();
};

Desk::Desk()
{
chang = 0;
kuan = 0;
}

Desk::~Desk()
{
cout << 'end' << endl;
}
void Desk::set(int x, int y)
{
chang = x;
kuan = y;
}
void Desk::Disp()
{
cout << chang << ' ' << kuan << endl;
}

int main()
{
Desk d1;
d1.set(2, 3);
d1.Disp();
Desk d2(d1);//利用构造函数初始化对象
d2.Disp();
return 0;
}


深复制:

#include<iostream>
#include<cstring>

using namespace std;

class Desk
{
private:
int kuan;
int chang;
char *name;
public:
Desk()
{
chang = 0;
kuan = 0;
}
Desk(Desk &d);
~Desk();
void set(int x,int y,char *na);
void Disp();
};

Desk::Desk(Desk &d)
{
chang =d.chang ;
kuan = d.kuan ;
name = new char[strlen(d.name) + 1];
strcpy(name, d.name);
}

Desk::~Desk()
{
delete[]name;
cout << 'end' << endl;
}
void Desk::set(int x, int y,char *na)
{
chang = x;
kuan = y;
name = na;
}
void Desk::Disp()
{
cout << chang << ' ' << kuan << ' '<<name<<endl;
}

int main()
{
Desk d1;
d1.set(2, 3,"I Love");
d1.Disp();
Desk d2(d1);//利用构造函数初始化对象
d2.Disp();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: