鱼C论坛

 找回密码
 立即注册
查看: 884|回复: 6

[已解决]卑微求助

[复制链接]
发表于 2020-4-15 13:25:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问各位:怎样才能采用单重继承的方式派生出一个类,在派生类中新增信息,且派生出的类的对象可以输出基类中对象的信息?求解答,感谢


                               
登录/注册后可看大图


  1. class Student {
  2. public:
  3.         string id, name, age, gender, address, depart;
  4.         Student(string ID, string Name, string Age, string Gender, string Address, string Department);
  5.         Student() {}
  6.         void display();
  7. };

  8. class PostGraduate : public Student {
  9. public:
  10.        
  11.         PostGraduate(string Tutor, string Allowance, string Research) {};
  12.         PostGraduate() {}
  13.         void display();
  14. private:
  15.     string tutor, allowance, research;
  16.         friend ostream& operator << (ostream& out, const PostGraduate& p1);
  17. };

  18. Student::Student(string ID, string Name, string Age, string Gender, string Address, string Department) {
  19.         id = ID;
  20.         name = Name;
  21.         age = Age;
  22.         gender = Gender;
  23.         address = Address;
  24.         depart = Department;
  25. }
  26. PostGraduate::PostGraduate(string ID, string Name, string Age, string Gender, string Address, string Tutor, string Department, string Allowance, string Research):
  27.         Student(ID, Name, Age, Gender, Address, Department){
  28.                 id = ID;
  29.         name = Name;
  30.         age = Age;
  31.         gender = Gender;
  32.         address = Address;
  33.         depart = Department;
  34.         tutor = Tutor;
  35.         allowance = Allowance;
  36.         research = Research;
  37. }

  38. void Student::display() {
  39.         cout << "Student:" << "学号--" << "--姓名--" << "--年龄--" << "--性别--" << "--地址--" << "--专业" << endl;
  40.         cout << "Student:" << id << "--" << name << "--" << age << "--" << gender << "--" << address << "--" << depart << "\n\n";
  41. }

  42. void PostGraduate::display() {
  43.         cout << "PostGraduate:" << "学号--" << "--姓名--" << "--年龄--" << "--性别--" << "--地址--" << "--专业" << "导师--" << "--津贴--" << "--研究方向" << endl;
  44.         cout << "PostGraduate:" << id << "--" << name << "--" << age << "--" << gender << "--" << address << "--" << depart << tutor << "--" << allowance << "--" << research << endl;
  45. }
复制代码
最佳答案
2020-4-15 14:44:04
  1. #include <iostream>
  2. #include <string>

  3. using namespace std;

  4. class Student {
  5. public:
  6.     string id, name, age, gender, address, depart;
  7.     Student(string ID, string Name, string Age, string Gender, string Address, string Department);
  8.     Student() {}
  9.     void display();
  10. };

  11. class PostGraduate: public Student {
  12. public:
  13.     //PostGraduate(string Tutor, string Allowance, string Research, const string &ID) {};
  14.     PostGraduate(string ID, string Name, string Age, string Gender, string Address, string Tutor, string Department,
  15.         string Allowance, string Research);
  16.     PostGraduate() {}
  17.     void display();
  18. private:
  19.     string tutor, allowance, research;
  20.     friend ostream &operator<<(ostream &out, const PostGraduate &p1);
  21. };

  22. Student::Student(string ID, string Name, string Age, string Gender, string Address, string Department) {
  23.     id = ID;
  24.     name = Name;
  25.     age = Age;
  26.     gender = Gender;
  27.     address = Address;
  28.     depart = Department;
  29. }

  30. PostGraduate::PostGraduate(string ID, string Name, string Age, string Gender, string Address, string Tutor, string Department,
  31.     string Allowance, string Research): Student(ID, Name, Age, Gender, Address, Department){
  32.         tutor = Tutor;
  33.         allowance = Allowance;
  34.         research = Research;
  35. }

  36. void Student::display() {
  37.     cout << "Student:" << "学号--" << "--姓名--" << "--年龄--" << "--性别--" << "--地址--" << "--专业" << endl;
  38.     cout << "Student:" << id << "--" << name << "--" << age << "--" << gender << "--" << address << "--" << depart << endl;
  39. }

  40. void PostGraduate::display() {
  41.     cout << "PostGraduate:" << "学号--" << "--姓名--" << "--年龄--" << "--性别--" << "--地址--" << "--专业" << "导师--"
  42.         << "--津贴--" << "--研究方向" << endl;
  43.     cout << "PostGraduate:" << id << "--" << name << "--" << age << "--" << gender << "--" << address << "--" << depart
  44.         << tutor << "--" << allowance << "--" << research << endl;
  45. }

  46. ostream &operator<<(ostream &out, const PostGraduate &p1) {        //运算符重载函数实现
  47.     out << "(" << p1.id << "," << p1.name << "," << p1.age << "," << p1.gender << "," << p1.address << "," << p1.depart << "," << p1.tutor << "," << p1.allowance << "," << p1.research << ")";
  48.     return out;
  49. }

  50. int main() {
  51.     Student s1("20190001", "Michael", "19", "Male", "机场路10号", "Compyter Science"); //参数分别为:学号、姓名、年龄、性别、地址、所属院系
  52.     s1.display();

  53.     //PostGraduate p1("Li", "1000", "Deep learning"); //参数分别为:导师、津贴、研究方向
  54.     PostGraduate p1("id", "name", "age", "gender", "address", "tutor", "department", "allowance", "research");
  55.     p1.display();
  56.     cout << p1 << endl;

  57.     return 0;
  58. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-15 13:32:28 | 显示全部楼层
把代码贴完整,要能够直接编译运行的那种

要在子类中访问父类的信息,需要父类允许才行
如果父类把所有的东西都 private 起来,子类是没办法访问的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-4-15 13:47:08 From FishC Mobile | 显示全部楼层
你这段代码不就已经实现需求了嘛?PostGraduate能访问Student内容,也有自己的私有属性
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-15 13:56:18 | 显示全部楼层
人造人 发表于 2020-4-15 13:32
把代码贴完整,要能够直接编译运行的那种

要在子类中访问父类的信息,需要父类允许才行
  1. #include<iostream>
  2. #include<string>
  3. using namespace std;

  4. class Student {
  5. public:
  6.         string id, name, age, gender, address, depart;
  7.         Student(string ID, string Name, string Age, string Gender, string Address, string Department);
  8.         Student() {}
  9.         void display();
  10. };

  11. class PostGraduate : public Student {
  12. public:
  13.         PostGraduate(string Tutor, string Allowance, string Research,const string &ID) {};
  14.         PostGraduate() {}
  15.         void display();
  16. private:
  17.     string tutor, allowance, research;
  18.         friend ostream& operator << (ostream& out, const PostGraduate& p1);
  19. };

  20. Student::Student(string ID, string Name, string Age, string Gender, string Address, string Department) {
  21.         id = ID;
  22.         name = Name;
  23.         age = Age;
  24.         gender = Gender;
  25.         address = Address;
  26.         depart = Department;
  27. }
  28. PostGraduate::PostGraduate(string ID, string Name, string Age, string Gender, string Address, string Tutor, string Department, string Allowance, string Research):
  29.         Student(ID, Name, Age, Gender, Address, Department){
  30.         id = ID;
  31.         name = Name;
  32.         age = Age;
  33.         gender = Gender;
  34.         address = Address;
  35.         depart = Department;
  36.         tutor = Tutor;
  37.         allowance = Allowance;
  38.         research = Research;
  39. }

  40. void Student::display() {
  41.         cout << "Student:" << "学号--" << "--姓名--" << "--年龄--" << "--性别--" << "--地址--" << "--专业" << endl;
  42.         cout << "Student:" << id << "--" << name << "--" << age << "--" << gender << "--" << address << "--" << depart << "\n\n";
  43. }

  44. void PostGraduate::display() {
  45.         cout << "PostGraduate:" << "学号--" << "--姓名--" << "--年龄--" << "--性别--" << "--地址--" << "--专业" << "导师--" << "--津贴--" << "--研究方向" << endl;
  46.         cout << "PostGraduate:" << id << "--" << name << "--" << age << "--" << gender << "--" << address << "--" << depart << tutor << "--" << allowance << "--" << research << endl;
  47. }

  48. ostream& operator<<(ostream& out, const PostGraduate& p1) {        //运算符重载函数实现
  49.         out << "(" << p1.id << "," << p1.name << "," << p1.age << "," << p1.gender << "," << p1.address << "," << p1.depart << "," << p1.tutor << "," << p1.allowance << "," << p1.research << ")";
  50.         return out;
  51. }

  52. int main() {
  53.         Student s1("20190001", "Michael", "19", "Male", "机场路10号", "Compyter Science"); //参数分别为:学号、姓名、年龄、性别、地址、所属院系
  54.         s1.display();

  55.         PostGraduate p1("Li", "1000", "Deep learning"); //参数分别为:导师、津贴、研究方向
  56.         p1.display();
  57.         cout << p1 << endl;

  58.         return 0;
  59. }
复制代码

这是大概完整的代码,但是有好多错误,不太会改
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-15 13:57:33 | 显示全部楼层
倒戈卸甲 发表于 2020-4-15 13:47
你这段代码不就已经实现需求了嘛?PostGraduate能访问Student内容,也有自己的私有属性

对,但是有好多错误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-15 14:44:04 | 显示全部楼层    本楼为最佳答案   
  1. #include <iostream>
  2. #include <string>

  3. using namespace std;

  4. class Student {
  5. public:
  6.     string id, name, age, gender, address, depart;
  7.     Student(string ID, string Name, string Age, string Gender, string Address, string Department);
  8.     Student() {}
  9.     void display();
  10. };

  11. class PostGraduate: public Student {
  12. public:
  13.     //PostGraduate(string Tutor, string Allowance, string Research, const string &ID) {};
  14.     PostGraduate(string ID, string Name, string Age, string Gender, string Address, string Tutor, string Department,
  15.         string Allowance, string Research);
  16.     PostGraduate() {}
  17.     void display();
  18. private:
  19.     string tutor, allowance, research;
  20.     friend ostream &operator<<(ostream &out, const PostGraduate &p1);
  21. };

  22. Student::Student(string ID, string Name, string Age, string Gender, string Address, string Department) {
  23.     id = ID;
  24.     name = Name;
  25.     age = Age;
  26.     gender = Gender;
  27.     address = Address;
  28.     depart = Department;
  29. }

  30. PostGraduate::PostGraduate(string ID, string Name, string Age, string Gender, string Address, string Tutor, string Department,
  31.     string Allowance, string Research): Student(ID, Name, Age, Gender, Address, Department){
  32.         tutor = Tutor;
  33.         allowance = Allowance;
  34.         research = Research;
  35. }

  36. void Student::display() {
  37.     cout << "Student:" << "学号--" << "--姓名--" << "--年龄--" << "--性别--" << "--地址--" << "--专业" << endl;
  38.     cout << "Student:" << id << "--" << name << "--" << age << "--" << gender << "--" << address << "--" << depart << endl;
  39. }

  40. void PostGraduate::display() {
  41.     cout << "PostGraduate:" << "学号--" << "--姓名--" << "--年龄--" << "--性别--" << "--地址--" << "--专业" << "导师--"
  42.         << "--津贴--" << "--研究方向" << endl;
  43.     cout << "PostGraduate:" << id << "--" << name << "--" << age << "--" << gender << "--" << address << "--" << depart
  44.         << tutor << "--" << allowance << "--" << research << endl;
  45. }

  46. ostream &operator<<(ostream &out, const PostGraduate &p1) {        //运算符重载函数实现
  47.     out << "(" << p1.id << "," << p1.name << "," << p1.age << "," << p1.gender << "," << p1.address << "," << p1.depart << "," << p1.tutor << "," << p1.allowance << "," << p1.research << ")";
  48.     return out;
  49. }

  50. int main() {
  51.     Student s1("20190001", "Michael", "19", "Male", "机场路10号", "Compyter Science"); //参数分别为:学号、姓名、年龄、性别、地址、所属院系
  52.     s1.display();

  53.     //PostGraduate p1("Li", "1000", "Deep learning"); //参数分别为:导师、津贴、研究方向
  54.     PostGraduate p1("id", "name", "age", "gender", "address", "tutor", "department", "allowance", "research");
  55.     p1.display();
  56.     cout << p1 << endl;

  57.     return 0;
  58. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-4-15 14:56:14 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 18:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表