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的继承实现则不再这里实现
相关推荐
简单例子展示虚函数展现的多态特性,更改一处注释就能对比基类是否是虚函数带来的变化
高质量的C++多态讲解,详细讲解虚函数,虚函数表,虚函数继承,虚函数继承下的内存分配等
多态性(在C + +中用虚函数实现)是面向对象程序设计语言继数据抽象和继承之后的第三个基本特征。 它提供了与具体实现相隔离的另一类接口,即把“ w h a t”从“h o w”分离开来。多态性提高了代码的组织性和可读性...
要求:1、虚函数 多态 多态表现为 基类 基类指针和继承间的关系 2、带有多对象成员。定义 3、体现继承 虚拟继承(要通过至少三层 父类父类子类) 虚函数 (3层 纵向关系) 水平方向上:体现出继承顺序 先虚拟继承 ...
这是C++编写的体现多态的程序,是在C++类里通过继承和派生来实现的,比较简单
C++继承,虚函数与多态性专题.C++继承,虚函数与多态性专题.
利用C++计算正方形,矩形,三角形圆形的面积,包含了虚函数,继承,多态相关的基础知识,这是一个示例程序力求简单易懂。代码采用VC6.0建立工程。
2、熟练掌握虚函数的作用及其使用方法。 3、掌握静态关联和动态关联的概念和用法。 4、理解纯虚函数和抽象类的概念和用法。 (二)实验内容 1、定义一个类A,在A中有两个私有的整型变量a和b,定义构造函数对a和b进行...
后端 / C++ 类 封装 继承 多态 stl容器 虚函数 纯虚函数 友元函数 模板
C++多继承多态的实现 如果一个类中存在虚函数,在声明类的对象时,编译器就会给该对象生成...虚函数指针如何排列,多个基类的指针为什么能够同时指向派生类对象,同时发生多态? 请看下面这段程序 #include <stdi
C++多态与虚函数,本章所讲的多态性指在继承类中与基类同名、同参数、同类型函数的不同行为。
6个不同C++实现继承与多态实验,附截图。利用虚基类解决二义性问题。动态多态性概念及掌握使用方法。虚函数的使用方法
//用关键字virtual声明一个虚函数 }; void Test(CBase *a) { a->FuncA(); } class CDeriveA :public CBase { public: virtual void FuncA(void){cout”This is CDeriveA::FuncA\n”} }; class ...
本代码中有:“包含与继承”、“虚函数与多态”、“模板”程序例子
本PPT讲解了C++面向对象技术中虚函数与多态方面的一些内容,希望对大家有所帮助。
过于著名反而没有去准备,只知道跟虚函数表有关。面试之后比较了 C++ 和 Java 多态的实现的异同,一并记录在这里。 C++ 多态的虚指针实现 首先讨论 C++. 多态也即子类对父类成员函数进行了重写 (Override) 后,将一...
C++面向对象,封装,继承,多态,虚函数,this指针相关知识内容,欢迎下载
在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以,当我们用父类的指针来操作一个...
本文分两部分即继承和虚函数与多态性,本文第一部分详细讲解了继承时的构造函数和析构函数的问题,父类与子类的 同名变量和函数问题,最后介绍了多重继承与虚基类。本文第二部分重点介绍了虚函数与多态性的问题,...
重点阐述了面向对象的动态多态和基于模板的静态多态,并初步探讨了两种技术的结合使用。