gpt4 book ai didi

c++ - C++中的类继承和向上转型

转载 作者:行者123 更新时间:2023-11-30 03:58:34 25 4
gpt4 key购买 nike

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

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 上被标记为 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

关于c++ - C++中的类继承和向上转型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27351489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com