gpt4 book ai didi

c++ - C++中的简单继承

转载 作者:行者123 更新时间:2023-11-30 00:55:23 26 4
gpt4 key购买 nike

在给定的程序中,B 类继承了 A 类,在 main() 中创建了 B 类的对象并调用了 getdata() 函数,为什么要调用 B 类的 getdata()?

class A {public: void getdata() { cout<<"Class A"; } };

class B: public A { public: void getdata() { cout<<"Class B"; } };

void main() { B b1; b1.getdata(); }

最佳答案

why does class B's getdata() is called??

因为b1B类型的对象。

虚拟成员函数根据调用它们的变量的静态类型解析。

在您给出的情况下,调用getdata() 的变量是b1,它是B 类型。因此,B::getdata() 被调用。

在您提供的链接中,http://www.tutorialspoint.com/cplusplus/cpp_polymorphism.htm , area 是通过 Shape* 类型的指针调用的,因此,调用了 Shape::area()

同时考虑这个程序:http://ideone.com/KVjN3

#include <iostream>

class A {public: void getdata() { std::cout<<"Class A\n"; } };

class B: public A { public: void getdata() { std::cout<<"Class B\n"; } };

int main() { B b1; b1.getdata(); A* pa = &b1; pa->getdata(); }

输出:

Class B
Class A

它与您的程序非常相似。 getdata() 的第一次调用是通过 B 进行的,因此调用了 B::getdata()。第二种是通过 A*,因此调用 A::getdata()

但是,如果您提供 virtual 关键字,所有这些都会改变。

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

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