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++中实现多态的基础。当在一个基类中声明一个虚函数时,这个函数可以在派生类中被重写,从而允许通过基类指针或引用调用派生类的版本。这样,即使不知道对象的确切类型,也可以执行适当的成员函数。例如: ...
如果`Animal`类的`makeSound()`不是虚函数,那么上述代码将不会表现出多态行为,`animal1`和`animal2`调用`makeSound()`都会执行`Animal`类的版本,即使它们实际上指向的是`Dog`和`Cat`对象。这将导致输出“动物发出...
C++的虚函数是实现多态性的重要机制,它允许我们通过基类指针或引用来调用派生类重写的函数。理解虚函数的工作原理对于深入掌握C++的面向对象编程至关重要。 首先,每当我们定义一个包含虚函数的类或者从这样的类...
在C++编程语言中,虚函数(Virtual Functions)和多态(Polymorphism)是面向对象编程的重要特性,它们使得程序具有高度的灵活性和可扩展性。本文将深入探讨这两个概念,结合示例代码进行详细解释。 首先,我们来...
高质量的C++多态讲解,详细讲解虚函数,虚函数表,虚函数继承,虚函数继承下的内存分配等
在C++中,一个类可以从多个基类派生,如果这些基类中有共同的虚函数,那么在派生类中需要使用虚继承来避免二义性。虚继承通过`virtual`关键字在基类列表中声明,如: ```cpp class Derived : virtual public Base1, ...
静态多态主要通过函数重载和运算符重载实现,而动态多态则依赖于虚函数和抽象类。 虚函数是C++中实现动态多态的关键。在基类中声明虚函数,可以让子类覆盖这个函数并提供自己的实现。这样,我们就可以通过基类指针...
C++虚函数表详解 C++中的虚函数表是实现多态机制的关键组件。虚函数表(Virtual Table,简称V-Table)是一种机制,用于存储类的虚函数的地址,解决继承和覆盖的问题,使得父类的指针可以正确地调用子类的成员函数。...
在C++中,多态是通过虚函数(Virtual Function)和虚继承(Virtual Inheritance)来实现的。 虚函数 虚函数是一种特殊的成员函数,它可以被子类重写。当我们在基类中定义一个虚函数时,子类可以根据需要重写该函数...
通过在基类中声明`makeSound`为虚函数,并在派生类中重写该函数,当我们使用基类指针调用`makeSound`时,将自动调用派生类的实现,实现了运行时多态。 #### 5. 总结 面向对象编程通过继承和多态等机制,提高了代码...
### C++多态虚函数表详解 #### 一、多态的基本概念与内存分布 在C++中,多态是一种让程序可以根据不同的上下文表现出不同行为的重要机制。它允许我们使用基类类型的指针或者引用指向派生类的对象,从而在运行时...
静态多态主要通过函数重载和运算符重载来实现,而动态多态则依赖于虚函数和纯虚函数,以及继承机制。 其次,“继承”(Inheritance)是另一个关键概念。继承允许一个类(子类)从另一个类(父类)中继承属性和行为...
多态性(在C + +中用虚函数实现)是面向对象程序设计语言继数据抽象和继承之后的第三个基本特征。 它提供了与具体实现相隔离的另一类接口,即把“ w h a t”从“h o w”分离开来。多态性提高了代码的组织性和可读性...
要求:1、虚函数 多态 多态表现为 基类 基类指针和继承间的关系 2、带有多对象成员。定义 3、体现继承 虚拟继承(要通过至少三层 父类父类子类) 虚函数 (3层 纵向关系) 水平方向上:体现出继承顺序 先虚拟继承 ...
这是C++编写的体现多态的程序,是在C++类里通过继承和派生来实现的,比较简单
在C++中,虚函数(`virtual` 关键字修饰)是实现多态的主要手段。虚函数使得子类可以覆盖(override)父类的函数实现,从而在运行时根据对象的实际类型来调用适当的方法。例如,`Shape`类可以有一个虚函数`getArea()...
C++虚函数是面向对象编程中的一个重要特性,它允许我们实现多态性,即一个基类指针或引用可以调用派生类重写的成员函数。这种能力在编写可扩展和可复用的代码时非常关键。下面我们将深入探讨C++虚函数的应用及其实现...
1. **动态多态**:主要通过类继承和虚函数机制实现,行为在运行时确定。 2. **静态多态**:通过模板实现,行为在编译时确定。 #### 函数多态与宏多态 虽然这两种技术并不总是被视为典型的多态,但它们确实展现了将...
动态多态则依赖于虚函数(`virtual`关键字)和纯虚函数(`= 0`),通过基类指针或引用调用派生类的成员函数,实现运行时的多态性。这种机制使得我们可以设计出灵活的接口,让程序具有更高的通用性和可扩展性。 在...