定义一个学生类,有学号(Sno)、姓名(name)、年龄(age)等私有属性,拥有共有成员函数来获取和设置学生类的属性;为学生类设计构造和析构函数,分别打印“学生类已创建”和“学生类已销毁”,观察构造和析构函数的执行

tianshanaoxue 2008-04-18 09:35:07
定义一个学生类,有学号(Sno)、姓名(name)、年龄(age)等私有属性,拥有共有成员函数来获取和设置学生类的属性;为学生类设计构造和析构函数,分别打印“学生类已创建”和“学生类已销毁”,观察构造和析构函数的执行
下面是我照葫芦画瓢的程序,不知道对不对。。
#include<cstring>
#include<iostream>

class stud
{
private: int sno,age;
char name;
char sex;
public:
stud(int sn, int a, char n, char s) //构造函数
{
sno = sn;
age = a;
strcpy(name, n);
sex = s;
cout<<"学生类已创建"<<endl;
}
~stud() //析构函数
{
cout<<"学生类已销毁"<<endl;
}
}

编译完有错误。。。\stu.cpp(23) : fatal error C1004: unexpected end of file found
Error executing cl.exe.
...全文
3831 5 打赏 收藏 转发到动态 举报
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianshanaoxue 2008-04-18
  • 打赏
  • 举报
回复
,<iostream>和<iostream.h>是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。

后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。

因此,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。
IT_lau 2008-04-18
  • 打赏
  • 举报
回复
楼上的已经很好了,顺便问一下using namespace std;
这句有时要用,但有时不用也可以,#include<iostream.h>
到底是怎么回事??
HelloDan 2008-04-18
  • 打赏
  • 举报
回复

#include <string>
#include <iostream>

using namespace std;


class stud
{
private:
int sno,age;
string name;
char sex;
public:
stud(int sn=0, int a=18, string n="Lee", char s='M') //构造函数
{
sno = sn;
age = a;
name=n;
sex = s;
cout <<"学生类已创建" <<endl;
}
~stud() //析构函数
{
cout <<"学生类已销毁" <<endl;
}
};




int main()
{
stud st;
return 0;
}

clhposs 2008-04-18
  • 打赏
  • 举报
回复

strcpy(name, n); //char可以直接复 name=n;
clhposs 2008-04-18
  • 打赏
  • 举报
回复

#include <cstring>
#include <iostream>

class stud
{
private: int sno,age;
char name;
char sex;
public:
stud(int sn, int a, char n, char s) //构造函数
{
sno = sn;
age = a;
strcpy(name, n);
sex = s;
cout < <"学生类已创建" < <endl;
}
~stud() //析构函数
{
cout < <"学生类已销毁" < <endl;
}
};//加个;

相关推荐
练习2(基础): 定义一个表示学生信息的类Student,要求如下: (1)类Student的成员变量: sNO 表示学号;sName表示姓名;sSex表示性别;sAge表示年龄;sJava:表示Java课程成绩。 (2)类Student带参数的构造方法: 在构造方法中通过形参完成对成员变量的赋值操作。 (3)类Student的方法成员: getNo():获得学号; getName():获得姓名; getSex():获得性别; getAge()获得年龄; getJava():获得Java 课程成绩 根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。(思路:对象数组) 练习3(基础): 编写Addition类,该类中应包含一组实现两数相加运算的重载方法。实现加法运算的方法,应接受两个参数(即加数和被加数),方法将两个参数进行加法运算后,返回相加结果。考虑可能针对不同的数据类型进行计算,重载一组方法,包括整型、长整型、浮点型、双精度浮点型、还有字符串。在main方法中创建Addition类的实例,分别调用重载方法测试其效果。应将Addition类打入到包中,以com.hpepm.java为包名。 练习4(基础): 生成3个学生实例,调用学生实例的showInfo方法,属性包含姓名年龄,性别,学号 思路: 1.创建一个学生类, 2.在main去实例化(创建)三个学生对象。 3.调用对象的showInfo方法,也就是说打印学生的信息 练习5(基础): 定义3个重载方法max,第一个方法求两个int值中的最大值,第2个方法求三个int值中的最大值,第3个方法求四个int值中的最大值,并分别调用三个方法 练习6(基础): 定义Person类,有3个属性:String name; int age; String school; (2)定义Person类的2个构造方法 练习7(基础): 建立一个学生类,其中成员变量为学号姓名、及三门课的成绩(数组),另建立一个包含主方法的类,定义2个学生类的对象 练习8(基础): 编写一个程序,从键盘接收十个整数,并输出其中的最小值,要求,将计算功能定义在一个类中,由主类负责接收输入,在用数组的方式传递给实现计算的类的方法,在输出结果 练习9(基础): (1)定义Person类,有4个属性:String name; int age; String school; String major, (2)定义Person类的3个构造方法: 第一个构造方法Person(String n, int a)设置类的name和age属性; 第二个构造方法Person(String n, int a, String s)设置类的name, age 和school属性; 第三个构造方法Person(String n, int a, String s, String m)设置类的name, age ,school和major属性; (3)在main方法中分别调用不同的构造方法创建的对象,并输出其属性

63,594

社区成员

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