友谊被继承??奇怪
friendship getting inherited ?? strange
正如人们所说 - ">朋友不是继承的" .
这意味着
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(在这里应该是错误的。
那么正确的说法是正确的:-
友谊不是遗传
的或者友谊是继承的,但不能在派生类中使用
友谊不是遗传
的
即使在您的示例中也是如此。对 f(b( 的调用不应该是那里的错误,因为Derived
对象被转换为Base&
类型。
函数f
只能访问 Base
类的私有部分和受保护部分,而只能访问 Derived
类的公共部分。
相关文章:
- 继承函数的重载解析
- arr[-1]在c++中的奇怪行为
- 具有菱形继承结构的子类的大小似乎很奇怪
- 继承和IS_DETECTED_V提供了一个奇怪的结果(C 17)
- 没有虚拟继承的奇怪行为
- C 虚拟继承奇怪的行为
- 奇怪的重复模板模式 - 继承和朋友
- 奇怪的是重复出现的模板图案:双继承
- 继承中出现奇怪的意外结果
- 多重继承中返回的奇怪 int 值
- 友谊被继承??奇怪
- C++具有继承类的奇怪性能
- 奇怪重复的模板模式多态拷贝(C++)中的继承
- 从两个模板参数多重继承的奇怪之处
- 继承的CEdit控件(用于垂直居中的文本)的行为很奇怪
- C++中的继承机制初始化器列表的一种奇怪形式
- 简单继承 - 奇怪的编译器错误
- 从POD结构继承的类中默认构造函数的奇怪行为
- c++,虚拟继承,奇怪的抽象类+克隆问题
- c++虚拟公共继承初始化奇怪的结果