|
本帖最后由 想学编程的小伙 于 2020-6-11 19:58 编辑
#include<iostream>
using namespace std;
class Cstudent
{
public:
char* pname;
int num;
char sex;
int age;
Cstudent(){};
Cstudent(char* name, int num, char sex, int age) :num(num), sex(sex), age(age)
{
int len = strlen(name);
pname = new char[len + 1];
memset(pname, 0, len + 1);
strcpy(pname, name);
}
~Cstudent()
{
if (pname)
{
delete[] pname;
}
cout << "123" << endl;
}
Cstudent(Cstudent& stud)
{
int dst_name_len = 0;
if (stud.pname) dst_name_len = strlen(stud.pname);
this->pname = NULL;
if (dst_name_len > 0)
{
this->pname = new char[dst_name_len + 1];
memset(this->pname, 0, dst_name_len + 1);
strcpy(this->pname, stud.pname);
}
}
};
int main()
{
Cstudent zhangsan = { "zhangsan", 100, 'f', 10 };
Cstudent lisi= zhangsan;
Cstudent wangwu(lisi);
return 0;
}
第一个问题:为什么Cstudent lisi= zhangsan;会调用Cstudent(Cstudent& stud)这个拷贝构造函数,不应该只是Cstudent wangwu(lisi)才能调用吗?
第二个问题:Cstudent lisi= zhangsan会调用Cstudent(Cstudent& stud),而Cstudent lisi; lisi = zhangsan;就不行呢?
求大佬们解答,谢谢了!
本帖最后由 阳光宅男 于 2020-6-11 23:05 编辑
问题一的两种方式都是用类对象初始化另一个类对象的方式
问题二前面的是调用复制构造函数,是初始化的情况
后面的情况是赋值的情况,需要重载等号运算符来
|
上一篇: dllmain创建线程下一篇: 无法从“const wchar_t [4]”转换为“LPWSTR”
|