c++ 虚函数 多态 类继承
c++ 是面向对象语言,面向对象编程的三大特征就是多态、抽象以及继承,c++与java的多态都是通过基类与子类的关系实现,抽象都是基于基类的统一特征来实现。但是c++与java的继承差别还是蛮大的,这里记录一下c++与java的继承之间的区别。
继承讲的是类,java中子类继承基类是通过关键字extend来实现,但是在c++中是通过符号“:”来实现,c++中还有一个重要的区别就是可以控制子类继承的权限,即是public、protected、private,不同的权限,则基类的成员变量在子类的权限是不一样的。但是java只有一种就是public。
类包括成员变量与成员函数,继承中主要多变的就是成员函数的继承,成员函数的继承是实现类多态的重要组件,首先java中基类的成员函数要想在子类中实现,只需要在子类中具有基类相同的函数签名(函数签名:包括函数的名字以及函数的参数),就实现了基类的函数(也可以成为重写了基类函数)。但是c++中是通过在函数签名加上关键字virtual来实现,即成为虚函数,c++中虚函数是实现多态的关键。下面就是c++虚函数以及多态实现的例子。
基类的头文件:
#ifndef FRUIT_H #define FRUIT_H class Fruit{ public: Fruit(){}; ~Fruit(){}; void show(); //实现多态的关键虚函数 virtual void name(); }; #endif
基类的CPP文件
#include "stdafx.h" #include "Fruit.h" #include <iostream> void Fruit::show(){ name(); //std::cout << "invoke method is Fruit show()" << std::endl; } void Fruit::name(){ std::cout << "Fruit" << std::endl; }
子类头文件
#ifndef APPLE_H
#define APPLE_H
#include "Fruit.h"
class apple :public Fruit{
public:
apple(){};
~apple(){};
void showAppleInfo();
//实现多态的关键虚函数
virtual void name();
};
#endif
//子类CPP
#include "stdafx.h" #include "Apple.h" #include <iostream> void apple::showAppleInfo(){ std::cout << "Thisis Apple class!" << std::endl; } void apple::name(){ std::cout << "Apple" << std::endl; }
int main(){ apple a; Fruit f; Fruit* pF = &a; pF->show(); pF = &f; pF->show(); return 0; }
以下是运行结果:
Apple
Fruit
补充说明以上讲的函数,java中称为方法。java的继承实现则不再这里实现
上一篇: java对象占用多少字节
下一篇: java对象占用多少字节