c ++中的类继承和upcasting

时间:2014-12-08 04:35:54

标签: c++ oop

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

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级打印。

有人可以在这里澄清我的误解吗?

1 个答案:

答案 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