这是我正在处理的简单代码,用于了解继承向下转换和向上转换等。
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级打印。
有人可以在这里澄清我的误解吗?
答案 0 :(得分:2)
您会注意到两种方法之间的区别在于,基类virtual
上标记为A
,另一种不是:
方法q定义为
virtual void q()
在基类上,而p只是
void p()
因此,
A* a1 = new B;
a1 -> p(); ... Uses a1's type to determine the method, statically
a1 -> q(); ... Uses virtual method table to determine the method at run time