设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 873|回复: 9
打印 上一主题 下一主题

[求助]学继承,发现了个严重的问题,不知道哪错了,大家来看看

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-4 01:27:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//这是我看书上的例题改的,原来的程序没有重载>>,没有数据输入函数;
//我改了后问题就出来了....我>>函数居然不能访问类里的数据成员,至少出错提示是这么说的"cannot access......"
//编译器VC6.0
#include <iostream>
#include <string>
using namespace std;
class Student //声明基类
{
public: //基类公用成员
void display( );
friend istream& operator >>(istream& in,Student& stu);
protected : //基类保护成员
int num;
string name;
char sex;
};
void Student::display( )
{
cout<<"num: "<<num<<endl;
cout<<"name: "<<name<<endl;
cout<<"sex: "<<sex<<endl;
}
istream& operator >>(istream& in,Student& stu)
{
cout<<"Please input the num,name,and sex: \n";
in>>stu.num>>stu.name>>stu.sex;
return in;
}

class Student1: protected Student //用protected继承方式声明一个派生类
{
public:
void display1( );
friend istream& operator >>(istream& in,Student1& stu);//这里该过来了,谢谢楼下提醒,不过错误提示还是没变;
private:
int age;
string addr;
};
void Student1::display1( )
{
cout<<"num: "<<num<<endl; //引用基类的保护成员
cout<<"name: "<<name<<endl;
cout<<"sex: "<<sex<<endl;
cout<<"age: "<<age<<endl; //引用派生类的私有成员
cout<<"address: "<<addr<<endl;
}
istream& operator >>(istream& in,Student1& stu)
{
cout<<"Please input the num,name,sex,age,and address:\n";
in>>stu.num>>stu.name>>stu.sex>>stu.age>>stu.addr;
return in;
}
int main( )
{
Student1 stud1; //stud1是派生类student1的对象
cout<<"input the student's record:\n";
cin>>stud1;
stud1.display1( ); //display是派生类中的公用成员函数
return 0;
}

--------------------------------------传说中的分割线-------------------------------------------
这里的错误提示:

Compiling...
C5-3.CPP
E:\C++源代码\教材例题程序\C5\C5-3.CPP(25) : error C2248: 'num' : cannot access protected member declared in class 'Student'
E:\C++源代码\教材例题程序\C5\C5-3.CPP(10) : see declaration of 'num'
E:\C++源代码\教材例题程序\C5\C5-3.CPP(25) : error C2248: 'name' : cannot access protected member declared in class 'Student'
E:\C++源代码\教材例题程序\C5\C5-3.CPP(11) : see declaration of 'name'
E:\C++源代码\教材例题程序\C5\C5-3.CPP(25) : error C2248: 'sex' : cannot access protected member declared in class 'Student'
E:\C++源代码\教材例题程序\C5\C5-3.CPP(12) : see declaration of 'sex'
E:\C++源代码\教材例题程序\C5\C5-3.CPP(50) : error C2248: 'num' : cannot access protected member declared in class 'Student'
E:\C++源代码\教材例题程序\C5\C5-3.CPP(10) : see declaration of 'num'
E:\C++源代码\教材例题程序\C5\C5-3.CPP(50) : error C2248: 'name' : cannot access protected member declared in class 'Student'
E:\C++源代码\教材例题程序\C5\C5-3.CPP(11) : see declaration of 'name'
E:\C++源代码\教材例题程序\C5\C5-3.CPP(50) : error C2248: 'sex' : cannot access protected member declared in class 'Student'
E:\C++源代码\教材例题程序\C5\C5-3.CPP(12) : see declaration of 'sex'
E:\C++源代码\教材例题程序\C5\C5-3.CPP(50) : error C2248: 'age' : cannot access private member declared in class 'Student1'
E:\C++源代码\教材例题程序\C5\C5-3.CPP(35) : see declaration of 'age'
E:\C++源代码\教材例题程序\C5\C5-3.CPP(50) : error C2248: 'addr' : cannot access private member declared in class 'Student1'
E:\C++源代码\教材例题程序\C5\C5-3.CPP(36) : see declaration of 'addr'
执行 cl.exe 时出错.
C5-3.OBJ - 1 error(s), 0 warning(s)

谁告诉一下怎么错了?还有,对代码有什么意见都说出来哈,
2#
发表于 2009-11-4 01:27:04 | 只看该作者
今天下午没课,晚上也没课,我在线等:>
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-4 01:27:05 | 只看该作者
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;

  4. class Student
  5. {
  6. public:
  7. void display( );
  8. friend istream& operator >>(istream& in,Student& stu);
  9. protected :
  10. int num;
  11. string name;
  12. char sex;
  13. };

  14. void Student::display( )
  15. {
  16. cout<<"num: "<<num<<endl;
  17. cout<<"name: "<<name<<endl;
  18. cout<<"sex: "<<sex<<endl;
  19. }

  20. istream& operator >>(istream& in,Student& stu)
  21. {
  22. cout<<"Please input the num,name,and sex: \n";
  23. in>>stu.num>>stu.name>>stu.sex;
  24. return in;
  25. }

  26. class Student1: protected Student
  27. {
  28. public:
  29. void display1( );
  30. friend istream& operator >>(istream& in,Student1& stu);
  31. private:
  32. int age;
  33. string addr;
  34. };

  35. void Student1::display1( )
  36. {
  37. cout<<"num: "<<num<<endl;
  38. cout<<"name: "<<name<<endl;
  39. cout<<"sex: "<<sex<<endl;
  40. cout<<"age: "<<age<<endl;
  41. cout<<"address: "<<addr<<endl;
  42. }

  43. istream& operator >>(istream& in,Student1& stu)
  44. {
  45. cout<<"Please input the num,name,sex,age,and address:\n";
  46. cout<<"num = ";
  47. in>>stu.num;
  48. cout<<"name = ";
  49. in>>stu.name;
  50. cout<<"sex('m' or 'w') = ";
  51. in>>stu.sex;
  52. cout<<"age = ";
  53. in>>stu.age;
  54. cout<<"address = ";
  55. getchar();

  56. getline(in, stu.addr);
  57. return in;
  58. }

  59. int main( )
  60. {
  61. Student1 stud1;
  62. cout<<"input the student's record:\n";
  63. cin>>stud1;
  64. stud1.display1( );
  65. return 0;
  66. }
复制代码
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-4 01:27:06 | 只看该作者
恩?版主,你改了之后还是同样的错误...
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-4 01:27:07 | 只看该作者
不过你写的代码让我看的舒服...呵呵
回复 支持 反对

使用道具 举报

6#
发表于 2009-11-4 01:27:09 | 只看该作者
你用gcc 编译吧. 如果不会gcc, 到我的博克去看 all about C++
回复 支持 反对

使用道具 举报

7#
发表于 2009-11-4 01:27:10 | 只看该作者
为什么会"cannot access protected member declared in class 'Student'"呢?啊...为什么.
回复 支持 反对

使用道具 举报

8#
发表于 2009-11-4 01:27:11 | 只看该作者
哦,我先去装一下GCC
回复 支持 反对

使用道具 举报

9#
发表于 2009-11-4 01:27:12 | 只看该作者
class Student1: protected Student //用protected继承方式声明一个派生类
{
public:
void display1( );
friend istream& operator >>(istream& in,Student& stu);
private:
int age;
string addr;
};

改成:

  1. class Student1: protected Student //用protected继承方式声明一个派生类
  2. {
  3. public:
  4. void display1( );
  5. friend istream& operator >>(istream& in,Student1& stu);
  6. private:
  7. int age;
  8. string addr;
  9. };
复制代码
回复 支持 反对

使用道具 举报

10#
发表于 2009-11-4 01:27:13 | 只看该作者
回楼上:
版主的那段代码跟你的是一样的,一模一样;输出的结果和我写的出错提示是一样的;还是说不能访问那些数据成员;
还有,GCC我用不来...谁有GCC的帮我编译一下看看是编译器的问题还是我代码的问题;谢谢了;
我真是看不出来怎么就错了;
回复 支持 反对

使用道具 举报

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

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 23:36 , Processed in 0.090266 second(s), 9 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

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