C++ 1.下面student & student::operator=(student &s)...............①这个函数是什么意思?作用是什么?

2.为什么s3=s2;...............②这里就调用了①的这个函数//【例7.4】类含有动态生成的数据成员,必须自定义析构函数以释放动态分配的内存,自定义//... 2.为什么 s3=s2;...............②这里就调用了①的这个函数

//【例7.4】类含有动态生成的数据成员,必须自定义析构函数以释放动态分配的内存,自定义
//拷贝构造函数(Copy Structor)和拷贝赋值操作符(Copy Assignment Operator)实现深拷贝。
#include <iostream>
#include <cstring>
using namespace std;
class student{
char *pName; //为了演示深拷贝,不用string类
public:
student();
student(char *pname);
student(student &s);
~student();
student & operator=(student &s);
};
student::student(){
cout<<"Constructor";
pName=NULL;
cout<<"缺省"<<endl;
}
student::student(char *pname)
{
cout<<"Constructor";
if(pName=new char[strlen(pname)+1]) strcpy(pName,pname);
//加一不可少,否则串结束符冲了其他信息,析构会出错!
cout<<pName<<endl;
}
student::student(student &s){ //copy function
cout<<"Copy Constructor";
if(s.pName){
if(pName=new char[strlen(s.pName)+1]) strcpy(pName,s.pName);
cout<<pName<<endl;
}
else pName=NULL;
}
student::~student(){ //因有动态生成的类成员,析构函数不可用缺省的析构函数
cout<<"Destructor";
if(pName) cout<<pName<<endl;
delete pName;
}
student & student::operator=(student &s).................................①
{
cout<<"Copy Assign operator";
delete[] pName;
if(s.pName){
if(pName=new char[strlen(s.pName)+1]) strcpy(pName,s.pName);
cout<<pName<<endl;
}
else pName=NULL;
return *this;
}
int main(void){
student s1("范英明"),s2("沈俊"),s3;
student s4=s1;
s3=s2;...............................②
return 0;
}
展开
 我来答
b_spike
2015-07-21 · TA获得超过3686个赞
知道大有可为答主
回答量:3724
采纳率:78%
帮助的人:1154万
展开全部
这是运算符重载,operator=表示重载=运算符(即赋值运算符)
使用了这个运算符重载之后,对这个类的对象使用=运算符就会自动调用这个函数
至于这个函数到底在干什么,看看函数内容就明白了
追问
这个函数的作用和前面的student::student(student &s)都是复制构造函数的意思吧?为什么student s4=s1;调用了student::student(student &s),而s3=s2;调用了运算符重载的那个,
还有student & student::operator=(student &s)..前面的那个&是什么意思?为什么要有这个取地址?
追答
&那是引用的意思,使用的参数&s表示参数是引用类型,而student前面的&表示这个运算符重载的函数的返回值是一个引用
至于调用哪一个,可以这么说:定义一个新的对象(不论是堆对象还是栈对象),肯定是调用构造函数,而赋值的过程才是调用运算符重载的那个函数
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式