C++ 中的类继承和向上转换

Class inheritance and upcasting in c++

本文关键字:转换 继承 C++      更新时间:2023-10-16

这是我正在处理的简单代码,用于学习继承向下转换和向上转换等。

class A
{ public:
  void p() {cout << “A::pn”;}
  virtual void q() {cout << “A::qn”;}
};
class B : public A
{ public:
  void p() { cout << “B::pn”;}
  void q() { cout << “B::qn”;}
};
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上标记为virtual,另一种不是:

方法 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