1
这是简单的代码我处理,以了解继承下来铸造了铸件等类继承和上溯造型在C++
class A
{ public:
void p() {cout << “A::p\n”;}
virtual void q() {cout << “A::q\n”;}
};
class B : public A
{ public:
void p() { cout << “B::p\n”;}
void q() { cout << “B::q\n”;}
};
int main()
{ A* a1 = new B;
a1 -> p();
a1 -> q();
}
其次是我的预期输出
B::p
B::q
以下是实际输出
A::p
B::q
我的理解是,B类是继承类A.然后我在主体中,我们创建了一个指向A类的指针,并将它的引用设置为B.因此,当我们调用函数p()和q()时,我期望B类内部的任何内容都可以打印。
任何人都可以澄清我的误解吗?
您正在调用基类指针上的非虚方法 - 您为什么期望派生类的重写被调用?这正是“虚拟”的意义所在 - “A :: p”不是。 – 2014-12-08 04:37:51
你究竟在哪里上传任何东西? – Blindy 2014-12-08 04:39:30
@Bindind:在'A * a1 = new B;'中。从指针到派生到指向基础的指针(无论是隐式还是其他)通常俗称为“向上”(因为您正在向上“继承”继承层次结构)。反向 - 总是显式的 - 投射然后是“低调”。 – 2014-12-08 05:03:19