写一个学生类,要求至少提供3种默认构造函数(默认值,指定值,对象赋值)

liang_sz 2009-06-19 01:13:28
写一个学生类,要求至少提供3种默认构造函数(默认值,指定值,对象赋值)

我是这样写的,请不要见笑,刚学^_^
我知道一定有错,所以请坛友指正

#include "stdafx.h"
#include <iostream.h>
#include <string.h>


class student
{
private:
char *name;
char *sex;
int age;

public:
student()//构造函数,默认值方式,不带参数
{
name = new char[10];
strcpy(name,"学生");
// name="学生";
// sex="性别";
// age=18;
}


student(char s_name,int s_age,char s_sex)//构造函数,带参数
{
// name=s_name;
age=s_age;
// sex=s_sex;
}

student(student& obj)//构造函数,以一个已经同类对象为参数
{
// name=obj.name;
age=obj.age;
// sex=obj.sex;
}
};


int main()
{
return 0;
}
...全文
140 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
crst_zh 2009-06-19
  • 打赏
  • 举报
回复
student(const student& obj)//构造函数,以一个已经同类对象为参数
{
name=obj.name;
age=obj.age;
sex=obj.sex;
}
这样不对的。

你的拷贝构造函数,name这样复制不对。

另外,凡是有指针成员,你就应该使用深拷贝而不是浅拷贝,否则析构的时候会出错。
yangyunzhao 2009-06-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yang_e_2009 的回复:]
引用 5 楼 crst_zh 的回复:
楼上的:
name="学生";
sex="性别";

这样写是不对的,要先申请空间,然后strcpy

或者就:
string name;
string sex;
int age;


为什么不可以呢? 我运行之后结果没有错
[/Quote]
一次运行对,不等于没有错误,更不等于到处都可以运行。
liang_sz 2009-06-19
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include <iostream.h>
#include <string.h>


class student
{
private:

int age;
char name[255];
char sex;

public:
student()//构造函数,默认值方式,不带参数
{
name = new char[255];
strcpy(name,"学生");
sex = new char[10];
strcpy(name,"男");
age=0;
}


student(char* s_name,int s_age,char s_sex)//构造函数,带参数
{
strcpy(name,s_name);
age=s_age;
sex=s_sex;
}

student(const student& obj)//构造函数,以一个已经同类对象为参数
{
name=obj.name;
age=obj.age;
sex=obj.sex;
}
};


int main()
{
return 0;
}



最后是这样吗?
转头结帖,谢谢大家回复!

to:tkminigame
老师也是这样写的哦

to:crst_zh
数据类型不太重要,重点讨论这3种构造函数的写法,还是谢谢你
yang_e_2009 2009-06-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 crst_zh 的回复:]
楼上的:
name="学生";
sex="性别";

这样写是不对的,要先申请空间,然后strcpy

或者就:
string name;
string sex;
int age;
[/Quote]
为什么不可以呢? 我运行之后结果没有错
crst_zh 2009-06-19
  • 打赏
  • 举报
回复
楼上的:
name="学生";
sex="性别";

这样写是不对的,要先申请空间,然后strcpy

或者就:
string name;
string sex;
int age;

yang_e_2009 2009-06-19
  • 打赏
  • 举报
回复

class student
{
private:
char *name;
char *sex;
int age;
public:
student()
{
// name = new char[10]; 这里不要好像没关系~
// strcpy(name,"学生");
name="学生";
sex="性别";
age=18;
}
student(char* s_name,int s_age,char* s_sex)// 参数是不是指针?
{
// name = s_name;
age = s_age;
// sex = s_sex;
}
student(const student& obj)//加上const可能好点吧 否则复制const对象时会报错的
{
// name=obj.name;
age=obj.age;
// sex=obj.sex;
}
};
crst_zh 2009-06-19
  • 打赏
  • 举报
回复
怎么成员都没有初始化完啊?
既然包含了<string>,为什么不用string name?
sex可以用char或者整形(枚举) 定义就行了啊
tkminigame 2009-06-19
  • 打赏
  • 举报
回复
设计得不合理的地方
char *name;
char *sex;


char name[255];
char sex;


student(char* s_name,int s_age,char s_sex)//构造函数,带参数
{
strcpy(name,s_name);
age=s_age;
sex=s_sex;
}

至善者善之敌 2009-06-19
  • 打赏
  • 举报
回复
已经很不错了,继续努力了

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧