求高手解决c++问题!!

来源:百度知道 编辑:UC知道 时间:2024/07/03 23:21:44
定义一个类包括数据成员:姓名,编号,性别和用于输入输出的成员函数,并在此基础上派生一个类(增加成绩)。~~·~比较啰嗦哦,还请多指教!
我的疑问:1.下面2条语句多是调用基类的getName函数,他们的结果相同吗,为什么? CStudent stu("LiMing","21010211");
cout<<stu.getName()<<endl;
2,如果CStudent中的数据成员student若改定义成private 会有什么不同为什么?
程序如下:#include<iostream.h>
#include<string.h>
class CPerson
{ public:
CPerson()
{
strcpy(pName,"");
strcpy(pID,"");
}
CPerson(char*name,char*id,bool isman=1)
{Input(name,id,isman);}
void Input(char*name,char*id,bool isman)
{
setMame(name);
setID(id);
setSex(isman);
}
void Output()
{
cout<<"姓名:"<<pName<<endl;
cout<<"编号:"<<pID<<endl;
char*str=bMan?"":"";
cout<<"性别:"<<str<<endl;
}
public:
char*getNa

你用了类嵌套,当然是不同了,CStudent stu("LiMing","21010211"); 生成stu对象时,先调用父类的无参数构造函数,此时name=""。然后
CStudent::CStudent(char*name,char*id,bool isman) :student(name,id,isman)
{
dbScore[0]=0;
dbScore[1]=0;
dbScore[2]=0;
} 再初始化CStudent的内置对象student,调用CPerson的带参数的构造函数,此时name="LiMing"。当以stu.getName()输出Name调用的是从父类继承过来的getName输出的Name是为空的,而stu内置对象student调用getName输出的就是LiMing。
2、改成pravite就不能通过'.'方式直接访问,只能有该内的成员函数或者友元函数来访问!

1.不同的。stu.getName()得到的是stu的name,是较外面一层的name。而stu.student.getName()是较里面的name,是stu这个cstudent对象的内嵌对象的name。你这个类相当于定义了一个怀孕的学生,就是学生里面还有人。

2.改成pravite就不能通过stu.student直接访问了。