【发布时间】:2012-04-18 17:47:55
【问题描述】:
我知道friend 不是继承的。我有课程Parent Person Child。 Parent 和 Person 是彼此的朋友。 Parent 具有以下 PROTECTED 功能...
class Person
{
friend class Parent;
public:
Parent * parent;
}
class Parent
{
friend class Person;
protected:
virtual void Answer() = 0;
}
class Child : public Parent
{
void Answer()
{
std::cout << "Child!" << endl;
}
}
我的问题是,如果没有继承友谊,我怎么能拥有以下...? (Person 有一个指向 Parent 的指针)
Person person;
Child child;
person.parent->Answer();
为什么是这个 Child! 的输出,并且在尝试访问虚函数时没有抛出运行时错误?
我对子函数的实现方式感到困惑,并且程序在运行时没有出错,因为我预计它正在尝试调用父函数的虚拟应答函数。
【问题讨论】:
-
你这里有继承吗?即
class Child: public Parent在您的子类定义中? -
你没有在
Child上调用任何函数,正如我在 Q 中看到的那样。 -
与其描述你的代码,不如发布一个琐碎(但完整)的代码sn-p。这样,我们在回答时都可以清楚您的继承/友谊关系是什么。
-
@Als 所以因为我从 Parent 类型调用 Answer,可以吗?即使它是虚拟的并且由 Child 类型实现?
-
你需要展示你想弄清楚的代码,然后我们可以很容易地解释它。没有,我们就迷路了。编辑您的问题以包含小而相关的示例。
标签: c++ inheritance virtual friend