学C++遇到的小问题

南气子水 2012-01-17 09:38:17
#include <iostream>
#include <string.h>
class Person
{
private:
char m_pName[12];
char m_pID[12];
bool m_bMan;

public:
void SetData(char *pName, char *pID, bool bMan)
{
int n = strlen(pName);
strncpy(m_pName, pName, n);
m_pName[n] = '\0';
n = strlen(pID);
strncpy(m_pID, pID, n);
m_pID[n] = '\0';
m_bMan = bMan;
}
void OutPut()
{
std::cout<<"姓名: "<<m_pName<<std::endl;
std::cout<<"编号: "<<m_pID<<std::endl;
char *str = m_bMan?"男":"女";
std::cout<<"性别: "<<str<<std::endl;
}
};
class Student: private Person // 私有继承
{
private:
double m_dbScore[3];

public:
void SetStudentData(char *pName, char *pID, bool bMan)
{
SetData(pName, pID, bMan); // 此时基类中的成员函数是派生类的保护成员函数,只有派生类的成员函数可以调用
}
void InputScore(double score1, double score2, double score3)
{
m_dbScore[0] = score1;
m_dbScore[1] = score2;
m_dbScore[2] = score3;
}
void Print()
{
OutPut();
for(int i=0; i<3; i++)
{
std::cout<<"成绩"<<i+1<<":"<<m_dbScore[i]<<std::endl;
}
}
};
class Teacher: private Person
{
private:
int m_nYear;

public:
void SetTeacherData(char *pName, char *pID, bool bMan)
{
SetData(pName, pID, bMan); // 此时基类中的成员函数是派生类的保护成员函数,只有派生类的成员函数可以调用
}
void InputYear(int nYear)
{
m_nYear = nYear;
}
void Print()
{
OutPut();
std::cout<<"教龄: "<<m_nYear<<" 年"<<std::endl;
}
};
int main()
{
Student cStu;
cStu.SetStudentData("LiMing", "4654651", 1);
cStu.InputScore(98, 97, 96);
cStu.Print();

std::cout<<std::endl;

Teacher cTea;
cTea.SetTeacherData("ChaoLi", "543687", 0);
cTea.Print();
cTea.InputYear(2);
return 0;
}

姓名: LiMing
编号: 4654651
性别: 男
成绩1:98
成绩2:97
成绩3:96

姓名: ChaoLi
编号: 543687
性别: 女
教龄: -858993460 年这里年份为什么没有显示?
...全文
27 点赞 收藏 3
写回复
3 条回复
南气子水 2012年01月17日
[Quote=引用 1 楼 czh3642210 的回复:]
C/C++ code
cTea.Print();//你先Print了后设置了,肯定是没有显示啊
cTea.InputYear(2);
[/Quote]
哦 对了 谢谢提醒啊 折腾我半天了
回复 点赞
面包大师 2012年01月17日
建议你在初始化的时候设置m_nYear=0
回复 点赞
面包大师 2012年01月17日
    cTea.Print();//你先Print了后设置了,肯定是没有显示啊
cTea.InputYear(2);
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告