|
#include <iostream>
#include <string>
using namespace std;
class CStudent
{
public:
char *p_name;
char sex;
int num;
int age;
CStudent(){};
CStudent(char* pname, char t_sex, int t_num, int t_age) :sex(t_sex), num(t_num), age(t_age)
{
p_name = NULL;
int n_len = 0;
if (pname)
{
n_len = strlen(pname);
}
if (n_len > 0)
{
p_name = new char[n_len + 1];
memset(p_name, 0, n_len + 1);
strcpy(p_name, pname);
}
}
CStudent(const CStudent& stud)
{
int n_len = 0;
n_len = strlen(stud.p_name);
p_name = new char[n_len + 1];
memset(p_name, 0, n_len + 1);
strcpy(p_name, stud.p_name);
num = stud.num;
age = stud.age;
}
~CStudent();
};
CStudent::~CStudent()
{
if (p_name)
{
delete[] p_name;
p_name = NULL;
}
}
void test()
{
CStudent stud_1 = { "zhangsan",'m', 1001, 20 };
CStudent stud_2(stud_1);
}
int main(int argc, char* argv[])
{
test();
return 0;
}
想问一下大佬
CStudent(const CStudent& stud)
{
int n_len = 0;
n_len = strlen(stud.p_name);
p_name = new char[n_len + 1];
memset(p_name, 0, n_len + 1);
strcpy(p_name, stud.p_name);
num = stud.num;
age = stud.age;
}
这句话的作用是啥 我看不懂啊
越学越不会了
楼上说的对,补充一下
void test()
{
CStudent stud_1 = { "zhangsan",'m', 1001, 20 };
CStudent stud_2(stud_1); //就是为了这句话
}
那个构造函数的参数是一个静态的类对象本身的引用
作用是根据一个已经存在的对象 复制创建一个新对象
其实这个构造函数C++自动提供了一个默认的复制构造函数,如果你不写他就默认赋值
但是你现在这个demo他有点区别,成员函数中有一个字符串指针,这就涉及到字符数组多大,是否会造成内存溢出的问题 所以在自己写的这个构造函数中就有
CStudent(const CStudent& stud)
{
int n_len = 0;
n_len = strlen(stud.p_name);
p_name = new char[n_len + 1];
memset(p_name, 0, n_len + 1);
strcpy(p_name, stud.p_name);
num = stud.num;
age = stud.age;
}
对字符串进行了长度的约束,再拷贝复制
下面那俩就不解释了
|
上一篇: 结构体数组的指针下一篇: 球球了,兄弟们,帮我康康吧
|