复制构造函数的一个实例
#include <iostream>
using namespace std;
/**
* 复制构造函数不是必须的,如果一个类中没有定义复制构造函数,则系统自动生成一个默认复制构造函数,其功能是将已知对象的值复制给对应对象的数据成员
* C++提供了用一个对象的值创建并初始化另一个新对象的方法,完成该功能的是复制构造函数。
* 复制构造函数有以下特点:
* (1)复制构造函数与类同名,没有返回类型
* (2)复制构造函数只有一个形参,该参数是该类的对象的引用。
* */
class computer
{
//默认访问权限是私有的
int op1; //操作数
char ch; //运算符
int op2; //操作数
public:
computer(computer &e)
{
//复制构造函数
//在复制时对两个要操作的数进行交换
this->op1 = e.op2;
this->ch = e.ch;
this->op2 = e.op1;
cout << "调用了复制构造函数" << endl;
}
computer(int b, char d, int c)
{
this->op1 = b;
this->ch = d;
this->op2 = c;
}
computer()
{
}
void Set(int b, char d, int c)
{
op1 = b;
ch = d;
op2 = c;
}
void Show();
void Init()
{
op1 = 3;
ch = '-';
op2 = 5;
}
};
void computer::Show()
{
//成员函数类外实现
switch (ch)
{
case '+':
cout << op1 + op2 << endl;
break;
case '-':
cout << op1 - op2 << endl;
break;
case '*':
cout << op1 * op2 << endl;
break;
case '/':
if (op2 == 0)
{
cout << "不能被0整除" << endl;
break;
}
cout << op1 / op2 << endl;
break;
default:
cout << "运算符输入有误" << endl;
}
}
int main()
{
computer c;
c.Init(); //通过成员对象进行初始化
c.Show();
computer d(c); //调用默认构造函数,此句与computer d = c等价
d.Show(); //显示运行结果
return 0;
}
析构函数实例
#include <iostream>
#include <cstring>
using namespace std;
/**
* 析构函数是一种用于撤销对象,回收对象占有资源的特殊对象函数,它与构造函数功能互补,成对出现。
* 如果在类中未显式定义析构函数,系统会自动调用一个默认析构函数,该函数无参数,函数体为空。
* 析构函数有以下特点:
* (1)无返回类型,但是不要加void
* (2)无参数,因此不存在析构函数重载,只有一个析构函数
* (3)在对象释放时由系统自动调用
* (4)如果程序中未声明,则系统自动产生一个默认析构函数。
* (5)析构函数与构造函数的功能相对应,所以析构函数名师构造函数名前加一个逻辑反运算符‘~’。
* (6)析构函数按照与调用构造函数相反的顺序被调用。
* 必须定义析构函数的情况如下:
* (1)构造函数打开一个文件,使用完文件时需要关闭文件。
* (2)从堆中分配了动态内存区,在对象消失之前必须释放。
* */
class CStuScore
{
public: //共有类型声明
void Show()
{
cout << strName << "的平均成绩为:" << GetAverage() << endl;
}
CStuScore(char *pName, int no, float s0, float s1, float s2)
{
strName = new char[12];
strcpy(strName, pName);
iStuNO = no;
fScore[0] = s0;
fScore[1] = s1;
fScore[2] = s2;
cout << "调用构造函数" << endl;
}
~CStuScore()
{
delete[] strName; //释放动态申请的内存
//delete[] strStuNO; //释放动态申请的内存
cout << "调用析构函数" << endl;
}
private: //私有类型声明
float fScore[3]; //3门课程成绩
char *strName; //姓名
int iStuNO; //学号
float GetAverage(); //计算平均成绩
};
float CStuScore::GetAverage() //计算平均成绩
{
return (fScore[0] + fScore[1] + fScore[2]) / 3.0;
}
int main()
{
CStuScore oOne("xiaoming", 1234567, 99, 95, 90);
oOne.Show();
return 0;
}
未经允许不得转载!C++:复制构造函数与析构函数