友谊得到继承??奇怪的
Posted
技术标签:
【中文标题】友谊得到继承??奇怪的【英文标题】:friendship getting inherited ?? strange 【发布时间】:2012-05-18 04:41:28 【问题描述】:正如所说 - “朋友不会继承”。 这意味着
class c
public:
friend void i_am_friend();
;
class d:public c
public:
//
;
这里 void i_am_friend() 不是在 d 类中继承的。用更专业的术语来说(我是这样认为的。)
d 类的对象不会为 void i_am_friend() 分配内存,因为它是基类的朋友。 现在考虑问题号。 14.3 本页 http://www.parashift.com/c++-faq/friends.html
class Base
public:
friend void f(Base& b);
...
protected:
virtual void do_f();
...
;
inline void f(Base& b)
b.do_f();
class Derived : public Base
public:
...
protected:
virtual void do_f(); // "Override" the behavior of f(Base& b)
...
;
void userCode(Base& b)
f(b);
这段代码怎么可能是正确的?因为
类派生 d;// d 将没有友元函数 类基 *b=&d; //结果b也没有成员函数
所以这里调用 f(b) 应该是错误的。
那么说什么是正确的:- 友谊不是遗传的 或者友谊被继承但不能在派生类中使用
【问题讨论】:
【参考方案1】:友谊不会继承
即使在您的示例中也是如此。那里对 f(b) 的调用应该不会出错,因为 Derived
对象被转换为 Base&
类型。
函数f
只能访问Base
类的私有和受保护部分,但只能访问Derived
类的公共部分。
【讨论】:
以上是关于友谊得到继承??奇怪的的主要内容,如果未能解决你的问题,请参考以下文章