为什么友元函数不可访问继承而来的保护成员?

[复制链接]
查看11 | 回复2 | 2011-4-9 22:37:26 | 显示全部楼层 |阅读模式
请看下面的代码,既然professor类保护继承了teacher类,那么teacher类的成员在professor类中就成了保护成员,派生类的友元函数是可以访问类中的保护成员的,实参为teacher类的子对象,与形参赋值兼容。但是编译时却出错了,提示为无权访问,为什么呢?
#include
#include
using namespace std;
class teacher
{

public:

teacher(int n,string nam,string s):num(n),name(nam),sex(s){}

void display();

int num;

string name;

string sex;
};
void teacher::display()
{

cout>num1>>name1>>sex1;

cout<<endl;

t=teacher(num1,name1,sex1);
}


int main()
{

professor p1(101,"张三","男",5120);

p1.display();

modify(p1);

p1.display();



system("pause");

return 0;
}
是不是友元函数modify的形参部分是属于对外的接口部分,不属于类体内的范围,只有友元函数体的内部(一对{}括号内的范围)才算是访问权限内的区域,可以访问类中的私有及保护成员。

回复

使用道具 举报

千问 | 2011-4-9 22:37:26 | 显示全部楼层
显然的 , 继承是不能以比基类小的访问属性继承的,class professor:protected teacher,class teacher 默认是public 吧 , 所以class professor:public teacher试试,没有调试环境,一点建议。
回复

使用道具 举报

千问 | 2011-4-9 22:37:26 | 显示全部楼层
参考答案最大的敌人不是粽子或机关,而是自身的恐惧
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行