C++中的简单继承
Simple Inheritance in C++
在给定的程序中,class B继承了class A,并且在class B的main()中创建了对象并调用了getdata()函数,为什么要调用class 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(); }
为什么调用类B的getdata()??
因为b1
是类型为B
的对象。
非virtual
成员函数是根据调用它们的变量的静态类型来解析的。
在您给出的例子中,调用getdata()
的变量是b1
,其类型为B
。因此,B::getdata()
被调用。
在您提供的链接中,http://www.tutorialspoint.com/cplusplus/cpp_polymorphism.htm,通过类型为Shape*
的指针调用area
,因此,调用Shape::area()
。
还可以考虑此程序:http://ideone.com/KVjN3
#include <iostream>
class A {public: void getdata() { std::cout<<"Class An"; } };
class B: public A { public: void getdata() { std::cout<<"Class Bn"; } };
int main() { B b1; b1.getdata(); A* pa = &b1; pa->getdata(); }
输出:
Class B
Class A
它与您的程序非常相似。getdata()
的第一次调用是通过B
,因此调用B::getdata()
。第二个是通过A*
,因此调用A::getdata()
。
但是,如果提供virtual
关键字,所有这些都会发生变化。
因为b1
被静态声明为B
类型的变量。
注意,在这种情况下,由于上面所写的原因,getdata()
不是虚拟的事实是不相关的。
C++对象本质上不是多态的(与Java相反)
为了实现多态性,您必须用"虚拟"键声明函数
相关文章:
- 继承函数的重载解析
- 被简单的C++多重继承示例难倒
- 我在C 中写了一个简单的继承程序,但是我有很多错误
- 简单继承实现中的构建错误"expected primary-expression before 'float' "来源
- C++中的简单继承
- C++ 继承简单错误
- 具有继承属性的增强精神解析器 - 简单示例无法编译
- c++编译器错误中的简单类继承
- 在简单继承之后调用复制构造函数
- 错误 LNK2001:未解析的外部符号 -- 我无法获得简单的继承以在C++中工作
- 使用虚继承的简单程序汇编输出
- 简单继承 - 奇怪的编译器错误
- 简单c++继承错误
- 简单的c++ /OOP继承
- 简单继承获得虚值表错误
- 简单的C++继承示例,出了什么问题?
- 理解(简单?)c++继承
- 提振.扩展-简单的继承示例-为什么我们在linux上看不到动物
- 当涉及到简单的派生时,我应该在继承中重写什么
- c++简单程序实现中的继承和虚函数错误