c++中的构造函数

来源:互联网 发布:centos zip 压缩 编辑:程序博客网 时间:2024/06/05 16:03

在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;}



0 0
原创粉丝点击