首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

抽象类,多态性C++ -在另一个函数中调用纯虚方法

抽象类是C++中的一种特殊类,它不能被实例化,只能作为其他类的基类使用。抽象类中可以包含纯虚方法,这些方法没有具体的实现,只有方法的声明,派生类必须实现这些纯虚方法才能被实例化。

多态性是面向对象编程中的一个重要概念,它允许不同类型的对象对同一消息做出不同的响应。在C++中,通过基类的指针或引用调用派生类的方法就可以实现多态性。

在另一个函数中调用纯虚方法时,需要通过基类的指针或引用来调用。首先,需要创建一个派生类的对象,并将其赋值给基类的指针或引用。然后,通过该指针或引用调用纯虚方法,编译器会根据实际对象的类型来确定调用的是派生类中的方法。

以下是一个示例代码:

代码语言:txt
复制
#include <iostream>

class AbstractClass {
public:
    virtual void pureVirtualMethod() = 0; // 纯虚方法
};

class ConcreteClass : public AbstractClass {
public:
    void pureVirtualMethod() override {
        std::cout << "调用了派生类的纯虚方法" << std::endl;
    }
};

void anotherFunction(AbstractClass* obj) {
    obj->pureVirtualMethod(); // 调用纯虚方法
}

int main() {
    ConcreteClass obj;
    anotherFunction(&obj); // 通过基类指针调用纯虚方法
    return 0;
}

在上述代码中,AbstractClass是一个抽象类,其中包含了一个纯虚方法pureVirtualMethod()。ConcreteClass是AbstractClass的派生类,实现了纯虚方法。在main函数中,创建了ConcreteClass的对象obj,并通过基类指针调用了anotherFunction函数。在anotherFunction函数中,通过基类指针调用了纯虚方法pureVirtualMethod(),实际上调用的是派生类ConcreteClass中的方法。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云产品:云服务器(https://cloud.tencent.com/product/cvm)
  • 腾讯云产品:云数据库MySQL版(https://cloud.tencent.com/product/cdb_mysql)
  • 腾讯云产品:云原生应用引擎TKE(https://cloud.tencent.com/product/tke)
  • 腾讯云产品:音视频处理(https://cloud.tencent.com/product/mps)
  • 腾讯云产品:人工智能(https://cloud.tencent.com/product/ai)
  • 腾讯云产品:物联网(https://cloud.tencent.com/product/iotexplorer)
  • 腾讯云产品:移动开发(https://cloud.tencent.com/product/mobdev)
  • 腾讯云产品:对象存储COS(https://cloud.tencent.com/product/cos)
  • 腾讯云产品:区块链服务(https://cloud.tencent.com/product/baas)
  • 腾讯云产品:腾讯云游戏引擎(https://cloud.tencent.com/product/gse)
  • 腾讯云产品:腾讯云直播(https://cloud.tencent.com/product/live)
  • 腾讯云产品:腾讯云视频会议(https://cloud.tencent.com/product/tcvc)
  • 腾讯云产品:腾讯云虚拟专用网络(https://cloud.tencent.com/product/vpc)
  • 腾讯云产品:腾讯云安全产品(https://cloud.tencent.com/product/safe)
  • 腾讯云产品:腾讯云容器服务(https://cloud.tencent.com/product/ccs)
  • 腾讯云产品:腾讯云弹性MapReduce(https://cloud.tencent.com/product/emr)
  • 腾讯云产品:腾讯云函数计算(https://cloud.tencent.com/product/scf)
  • 腾讯云产品:腾讯云数据库MongoDB版(https://cloud.tencent.com/product/cdb_mongodb)
  • 腾讯云产品:腾讯云数据库Redis版(https://cloud.tencent.com/product/cdb_redis)
  • 腾讯云产品:腾讯云数据库SQL Server版(https://cloud.tencent.com/product/cdb_sqlserver)
  • 腾讯云产品:腾讯云数据库PostgreSQL版(https://cloud.tencent.com/product/cdb_postgresql)
  • 腾讯云产品:腾讯云数据库MariaDB版(https://cloud.tencent.com/product/cdb_mariadb)
  • 腾讯云产品:腾讯云数据库DCDB版(https://cloud.tencent.com/product/cdb_dcdb)
  • 腾讯云产品:腾讯云数据库TDSQL-C版(https://cloud.tencent.com/product/cdb_tdsqlc)
  • 腾讯云产品:腾讯云数据库TDSQL-MariaDB版(https://cloud.tencent.com/product/cdb_tdsqlmariadb)
  • 腾讯云产品:腾讯云数据库TDSQL-PostgreSQL版(https://cloud.tencent.com/product/cdb_tdsqlpostgresql)
  • 腾讯云产品:腾讯云数据库TDSQL-MySQL版(https://cloud.tencent.com/product/cdb_tdsqlmysql)
  • 腾讯云产品:腾讯云数据库TDSQL-SQLServer版(https://cloud.tencent.com/product/cdb_tdsqlsqlserver)
  • 腾讯云产品:腾讯云数据库TDSQL-Redis版(https://cloud.tencent.com/product/cdb_tdsqlredis)
  • 腾讯云产品:腾讯云数据库TDSQL-MongoDB版(https://cloud.tencent.com/product/cdb_tdsqlmongodb)
  • 腾讯云产品:腾讯云数据库TDSQL-DCDB版(https://cloud.tencent.com/product/cdb_tdsqldcdb)
  • 腾讯云产品:腾讯云数据库TDSQL-Oracle版(https://cloud.tencent.com/product/cdb_tdsqloracle)
  • 腾讯云产品:腾讯云数据库TDSQL-PolarDB版(https://cloud.tencent.com/product/cdb_tdsqlpolardb)
  • 腾讯云产品:腾讯云数据库TDSQL-Greenplum版(https://cloud.tencent.com/product/cdb_tdsqlgreenplum)
  • 腾讯云产品:腾讯云数据库TDSQL-SAP HANA版(https://cloud.tencent.com/product/cdb_tdsqlsaphana)
  • 腾讯云产品:腾讯云数据库TDSQL-ClickHouse版(https://cloud.tencent.com/product/cdb_tdsqlclickhouse)
  • 腾讯云产品:腾讯云数据库TDSQL-Druid版(https://cloud.tencent.com/product/cdb_tdsqldruid)
  • 腾讯云产品:腾讯云数据库TDSQL-Neo4j版(https://cloud.tencent.com/product/cdb_tdsqlneo4j)
  • 腾讯云产品:腾讯云数据库TDSQL-ES版(https://cloud.tencent.com/product/cdb_tdsqles)
  • 腾讯云产品:腾讯云数据库TDSQL-ClickHouse版(https://cloud.tencent.com/product/cdb_tdsqlclickhouse)
  • 腾讯云产品:腾讯云数据库TDSQL-Druid版(https://cloud.tencent.com/product/cdb_tdsqldruid)
  • 腾讯云产品:腾讯云数据库TDSQL-Neo4j版(https://cloud.tencent.com/product/cdb_tdsqlneo4j)
  • 腾讯云产品:腾讯云数据库TDSQL-ES版(https://cloud.tencent.com/product/cdb_tdsqles)
  • 腾讯云产品:腾讯云数据库TDSQL-ClickHouse版(https://cloud.tencent.com/product/cdb_tdsqlclickhouse)
  • 腾讯云产品:腾讯云数据库TDSQL-Druid版(https://cloud.tencent.com/product/cdb_tdsqldruid)
  • 腾讯云产品:腾讯云数据库TDSQL-Neo4j版(https://cloud.tencent.com/product/cdb_tdsqlneo4j)
  • 腾讯云产品:腾讯云数据库TDSQL-ES版(https://cloud.tencent.com/product/cdb_tdsqles)
  • 腾讯云产品:腾讯云数据库TDSQL-ClickHouse版(https://cloud.tencent.com/product/cdb_tdsqlclickhouse)
  • 腾讯云产品:腾讯云数据库TDSQL-Druid版(https://cloud.tencent.com/product/cdb_tdsqldruid)
  • 腾讯云产品:腾讯云数据库TDSQL-Neo4j版(https://cloud.tencent.com/product/cdb_tdsqlneo4j)
  • 腾讯云产品:腾讯云数据库TDSQL-ES版(https://cloud.tencent.com/product/cdb_tdsqles)

请注意,以上链接仅为示例,具体产品和链接可能会根据腾讯云的更新而变化。建议您在使用时参考腾讯云官方文档或咨询腾讯云客服以获取最新信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++】多态 ⑪ ( 函数抽象类 | 函数语法 | 抽象类和实现 | 代码示例 )

一、函数抽象类 1、函数 函数 : C++ 语言中 , " 函数 " 是 特殊类型的 函数 , " 函数 " 父类 声明 , 但是没有实现 ; 抽象类 : " 函数...virtual void pureVirtualFunction() = 0; 3、抽象类和实现 " 抽象类 " 就是定义了一个 " 函数 " , " 抽象类 " 至少包含一个函数 , 抽象类...不能 创建 实例对象 , 只能作为其它类的 父类 ; " 函数 " 是一种 父类 声明但没有实现 的函数 , 其目的是使 父类 成为抽象类 ; 任何从抽象类派生出来的子类都必须提供 函数...派生类 , 继承 AbstractClass 抽象类 , 实现了 函数 pureVirtualFunction 函数 ; 实现的 函数 可以不使用 virtual 修饰 , 函数声明 最后添加...子类对象 , 使用 抽象类 指针 调用 函数 , 由于 父类 的 函数没有实现 , 实际调用的 是 子类对象的 函数 , 该调用 发生了 多态 ; 代码示例 : #include "iostream

23230

C++ 继承函数函数、普通函数,三者的区别

; } }; 2.函数(pure virtual)        C++包含函数的类,被称为是“抽象类”。...抽象类不能使用new出对象,只有实现了这个函数的子类才能new出对象。   C++函数更像是“只提供申明,没有实现”,是对子类的约束,是“接口继承”。   ...C++函数也是一种“运行时多态”。   ...如下面的类包含函数,就是“抽象类”: class A { public: virtual void out1(string s)=0; virtual void out2(string...普通函数是父类为子类提供的“强制实现”。   因此,继承关系,子类不应该重写父类的普通函数,因为函数调用至于类对象的字面值有关。

1.2K30

从零开始学C++函数与多态(二):函数抽象类析构函数

一、函数 函数是实现多态性的前提 需要在基类定义共同的接口 接口要定义为函数 如果基类的接口没办法实现怎么办?...如形状类Shape 解决方法 将这些接口定义为函数 基类不能给出有意义的函数定义,这时可以把它声明成函数,把它的定义留给派生类来做 定义函数: class 类名{        ...virtual 返回值类型 函数名(参数表) = 0;     }; 函数不需要实现 二、抽象类 作用 抽象类为抽象和设计的目的而声明,将有关的数据和行为组织一个继承层次结构,保证派生类具有要求的行为...构造函数不能是函数,析构函数可以是函数 1、抽象类不能用于直接创建对象实例,可以声明抽象类的指针和引用 2、可使用指向抽象类的指针支持运行时多态性 3、派生类必须实现基类函数,否则它仍将被看作一个抽象类...Shape类是抽象类,Draw函数函数,Circle, Square, Rectangle都重新实现了Draw,在这里把Shape的析构函数声明为函数,那么delete 基类指针,会调用派生类的析构函数

1.3K00

c++】多态&&函数&&抽象类&&继承函数表详解

那么继承要构成多态还有两个条件: 必须通过基类的指针或者引用调用函数调用函数必须是函数,且派生类必须对基类的函数进行重写 2.2 函数 函数:即被virtual修饰的类成员函数称为函数...抽象类 3.1 概念 函数的后面写上 =0 ,则这个函数函数。包含函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。...nullptr 总结一下派生类的表生成:a.先将基类表内容拷贝一份到派生类 b.如果派生类重写了基类某个函数,用派生类自己的函数覆盖基类的函数 c.派生类自己新增加的函数按其派生类的声明次序增加到派生类表的最后...下面我们使用代码打印 出函数 typedef void(*VFPTR) (); void PrintVTable(VFPTR vTable[]) { // 依次取函数指针打印并调用。...所以菱形继承、菱形虚拟继承我们的表我们就不看了,一般我们也不需要研究清楚,因为实际很少用 C++ 函数表解析 | 酷 壳 - CoolShell C++ 对象的内存布局 | 酷 壳 - CoolShell

32110

C++ 语言】面向对象 ( 继承 | 重写 | 子类调用父类方法 | 静态多态 | 动态多态 | 函数 | 函数 )

文章目录 类的继承 方法的重写 子类调用父类方法 多态 函数 函数示例 函数 相关代码 类的继承 ---- 1....C++ 多继承 : Java 只能进行单继承 , 但是 C++ 是可以继承多个父类的 ; 多继承时 , 使用 “,” 将多个父类分隔即可 ; 5....函数 : 类似于 Java 的抽象方法 , 父类声明后 , 该方法必须实现 , 否则编译时报错 ; 2....代码示例 : ① 父类定义函数 : //父类 class Parent{ public: //函数 , 类似于 Java 的抽象方法 , //父类声明后 , 该方法必须实现 , 否则编译时报错..." << endl; } }; ③ 调用子类实现的函数 : //栈内存创建一个 Child 对象, 并调用其重写的父类的方法 Child child; //函数测试 parent

1K20

浅谈C++多态性

假设没有使用函数的话,即没有利用C++多态性,则利用基类指针调用对应的函数的时候,将总被限制基类函数本身,而无法调用到子类中被重写过的函数。...C++函数 一、定义 函数基类声明的函数,它在基类未定义,但要求不论什么派生类都要定义自己的实现方法。...基类实现函数方法函数原型后加“=0” virtual void funtion()=0 二、引入原因 1、为了方便使用多态特性,我们经常须要在基类定义虚拟函数。...为了解决上述问题,引入了函数的概念,将函数定义为函数方法:virtual ReturnType Function()= 0;),则编译器要求派生类必须予以重写以实现多态性。...2、函数 函数基类中被声明为virtual,并在派生类又一次定义的成员函数,可实现成员函数的动态覆盖(Override) 3、抽象类 包括函数的类称为抽象类

36710

C++多态函数抽象类与多态案例(二)-制作饮品

函数抽象类 多态,通常父类函数的实现是毫无意义的,主要都是调用子类重写的内容 因此可以将函数改为函数 函数语法:virtual 返回值类型 函数名 (参数列表)= 0 ; 当类中有了函数...,这个类也称为==抽象类== 抽象类特点: 无法实例化对象 子类必须重写抽象类函数,否则也属于抽象类 示例: class Base { public: //函数 //类只要有一个函数就称为抽象类...//抽象类特点: //抽象类无法实例化对象 //子类必须重写父类函数,否则也属于抽象类 virtual void func() = 0; }; class Son :...public Base { public: virtual void func() //子类必须重写父类函数,否则子类无法实例化对象。...() { test01(); system("pause"); return 0; } 写函数函数就是想用多态,目的就是想让子类重写父类函数

21210

C++基础(七).多态(2)

,运行时多态性(编译时多态性:通过重载函数实现 ;运行时多态性:通过函数实现) 函数基类中被声明为virtual,并在派生类重新定义的成员函数,可实现成员函数的动态覆盖(Override)...函数函数基类声明的函数,它在基类没有定义,但要求任何派生类都要定义自己的实现方法。...基类实现函数方法函数原型后加“=0” 抽象类:包含函数的类称为抽象类。...由于抽象类包含了没有定义的函数,所以不能定义抽象类的对象 接口:接口只是一个概念,它在C++中用抽象类来实现,只包含函数的抽闲类叫接口 基类:基类是相对于它的派生类而言的(基类只是一种特殊关系...然而可以有抽象类类型的指针和引用可以作为参数,同样抽象类的指针和引用可以作为函数的返回值类型。因为他们可以指向或者引用抽象类的子类对象 函数子类里面被实现的。

40510

C++基础多态(PolyMorphism)

C++按照实现的时机分为编译时多态和运行时多态 1.编译时多态也成为静态连编,是指程序在编译的时候就确定了多态性,通过重载机制实现 2运行时多态又称为动态联编,是指必须在运行才能确定的多态性,通过继承和函数实现...为了解决这个问题,方便使用类的多态性,引入了函数的概念。 函数基类声明的函数,它在基类没有定义,但要求任何派生类都要定义自己的实现方法。...基类实现函数方法函数原型后加“=0” 函数声明如下: virtual 类型 函数名(参数列表)= 0; 抽象类   一个包含虚拟函数的类称为抽象类抽象类是不能定义对象的。...同时抽象类只能作为基类来使用,其函数的实现由派生类给出。如果派生类没有重新定义函数,而只是继承基类的函数,则这个派生类仍然还是一个抽象类。...如果派生类给出了基类函数的实现,则该派生类就不再是抽象类了,它是一个可以建立对象的具体的类。

47030

C++ 函数详解:多态性实现原理及其面向对象编程的应用

C++是一种面向对象的编程语言,C++函数是实现多态性的关键 什么是函数 函数是一个基类声明的函数,它可以被子类重写并提供不同的实现。...C++,使用关键字virtual来声明一个函数函数的原理是将函数调用的控制权交给运行时环境,而不是编译时环境。因此,函数的实现需要在运行时才能确定。...这种行为称为运行时多态性,因为实际调用函数是在运行时确定的。 多态的底层原理 C++,多态是通过函数表和指针来实现的。函数表是一个特殊的表格,其中包含了函数的地址。...当调用一个函数时,程序将首先查找该对象的指针,然后使用指针函数表来查找正确的函数地址。这种方法使得程序在运行时能够动态地选择正确的函数。...当使用基类指针或引用来访问派生类对象时,函数调用派生类的实现,实现了运行时多态性面向对象的编程多态性是一个非常重要的概念,可以使代码更加灵活、可扩展和易于维护。

76010

#1构造函数调用方法 | TW洞见

谜题 C#,用virtual关键字修饰的方法(属性、事件)称为方法(属性、事件),表示该方法可以由派生类重写(override)。...方法是.NET的重要概念,可以说某种程度上,方法使得多态成为可能。 然而方法的使用却存在着很大学问,如果滥用的话势必对程序产生很大的负面影响。...我们构造函数调用方法,碍着ReSharper什么事儿了? 其实这个警告就是提醒我们不要在非封闭类型的构造函数调用方法属性。但为什么这样做不合适呢?解惑之前,我们先来了解两个概念。...的构造函数调用方法V()时,ReSharper会给出virtual member call in constructor的警告。...Virtual member call in constructor的警告是因为,对于Base b = new Derived();这样的代码: 基类构造函数的执行要早于子类构造函数 基类构造函数对于方法调用

1.2K110

1小时精通c++面向对象编程

五、多态性函数 5.1 多态性 发出同样的消息被不同类型的对象接受导致完全不同的行为 多态可分为:静态多态性与动态多态性(必须存在于继承的环境之中) 5.1.1 函数重载 ,构造函数可以重载,...动态联编对成员函数的选择是基于对象的类型,针对不同的对象类型将做出不同的编译结果。C++中一般情况下的联编是静态联编,但是当涉及到多态性函数时应该使用动态联编。...act1() 5.5 函数 基类不能为函数给出一个有意义的实现时,可将其声明为函数,其实现留待派生类完成 5.5.1 函数定义格式 ?...成员函数内可以调用函数,但在构造函数或析构函数内不能调用函数函数没有实现代码) 5.6.1 抽象类的作用 1用作基类:一个继承层次结构,提供一个公共的根,并基于抽象类的操作设计出对抽象类所描述的一类对象进行操作的公共接口...图5-10 函数调用方法 5.6.2 示例 ? 图5-11 函数 ? 图5-12 函数(续) ? 图5-13 函数(续) 5.6.3 说明 ?

82030

c#的多态学习总结

面向对象编程范式多态性往往表现为"一个接口,多个功能"。 多态性可以是静态的或动态的。静态多态性函数的响应是在编译时发生的。动态多态性函数的响应是在运行时发生的。...c++也有抽象类,只要定义了函数的都成为抽象类函数:virtual void area() = 0; //定义函数,用来某形状计算面积而且不能实例化,只能被继承后,由派生类来实例化...当有一个定义函数需要在继承类实现时,可以使用方法。...方法是使用关键字 virtual声明的。方法可以不同的继承类中有不同的实现。对方法调用是在运行时发生的。 c#的动态多态性是通过 抽象类方法 实现的。...方法也可以被直接调用抽象类方法共同实现动态多态性

79720

C++一分钟之-函数抽象类

C++的面向对象编程之旅函数抽象类是实现多态性不可或缺的两块基石。它们不仅加深了类层次间的耦合度,还极大地提升了代码的灵活性和可扩展性。...本文旨在深入浅出地解析函数抽象类的核心概念、常见问题、易错点及其规避策略,并通过实例代码加以说明。函数:多态的魔法棒概念函数C++实现动态多态的关键机制。...它允许派生类重写基类的方法,且通过基类指针或引用来调用时,能够根据实际对象类型动态决定调用哪个版本的函数。...如何避免确保需要多态行为的函数被明确标记为virtual。避免不必要的情况下滥用函数,特别是对于频繁调用的小函数。...return 0;}结语函数抽象类C++实现多态性的强大工具,它们为程序设计带来了前所未有的灵活性。掌握其精髓,合理规划类的继承结构,可以有效避免常见的陷阱和误区,提升代码的健壮性和可维护性。

12610

C++不要在构造函数和析构函数调用函数

虽然可以对函数进行实调用,但程序员编写函数的本意应该是实现动态联编。构造函数调用函数函数的入口地址是在编译时静态确定的,并未实现调用。...但是为什么构造函数调用函数,实际上没有发生动态联编呢? 1. 不要在构造函数调用函数的原因 第一个原因,概念上,构造函数的工作是为对象进行初始化。...Visual C++,包含函数的类对象的指针被安排在对象的起始地址处,并且函数表(vtable)的地址是由构造函数写入指针的。...2.不要在析构函数调用函数的原因 同样的,析构函数调用函数函数的入口地址也是在编译时静态决定的。也就是说,实现的是实调用而非虚调用。 考察如下例子。...因此,一般情况下,应该避免构造函数和析构函数调用函数,如果一定要这样做,程序猿必须清楚,这是对函数调用其实是实调用

2.8K30

深入解析C++函数继承:实现多态性与继承关系的高级特性

这里写目录标题 函数 函数实现动态绑定 继承 抽象类 函数 函数C++中用于实现多态性的一种特殊函数。它通过使用关键字"virtual"进行声明,基类定义,可在派生类中进行重写。...这使得继承关系,通过基类指针或引用调用函数时,可以根据实际对象的类型来动态地确定要执行的函数版本,实现多态性的特性。...函数定义 C++ ,可以通过函数声明前面加上关键字 virtual 来定义函数。...C++,当基类的指针或引用指向派生类的对象时,通过调用函数,可以实现对应于派生类的特定实现。这种根据对象的实际类型来确定调用哪个函数的机制就是动态绑定。...它是实现抽象类多态性的重要机制之一。 如果某个函数不是抽象类的成员函数,不能用基类指针调用

1K10

C++】多态 ⑬ ( 多继承应用 “ 抽象类 “ | 接口和抽象类 | C++ 语言中接口实现 | 只定义 函数抽象类作接口 | )

语言中接口实现 C++ 语言中 , 没有接口概念 , 这里使用 " 函数 " 实现接口 ; 接口类特点 : 接口类 只有 函数原型 , 没有成员变量 , 函数原型 指的是 函数只有 返回值 函数名...和 参数列表 , 没有函数体 ; C++ 的 接口类 有如下要求 : 类只能定义函数 , 该类是一个抽象类 ; 类不能定义除函数之外的其它成员 , 如 普通函数 , 成员变量 ; 下面的类就是...只 定义了 函数抽象类 , 可以当做接口使用 ; // 定义了函数的类就是抽象类 // 也可以用作接口 class Interface { public: // 函数...virtual void pureVirtualFunction() = 0; }; 二、代码示例 - 多继承应用 " 抽象类 " C++ , 使用只定义了 函数抽象类 ,..., 通过子类调用接口方法 DerivedClass d; d.add(1, 2); d.minus(1, 2); // 将子类对象赋值给接口指针 , 通过接口指针调用接口方法 Interface1

17420

字节一面,轻松通过!

说一下C++的多态 C++多态性是面向对象编程的一个重要概念,它允许不同类的对象对同一消息做出不同的响应。C++实现多态性主要通过函数(virtual function)和继承来实现。...函数多态性 函数基类声明的函数可以被子类重写(覆盖)并在运行时动态绑定到相应的函数。使用 virtual 关键字声明函数函数。...: 当基类指针或引用指向派生类对象时,通过基类的函数进行调用时,会根据实际对象的类型调用对应的函数,这种行为称为多态性。...函数抽象类 函数: 一个类可以包含函数,通过函数声明的末尾添加 = 0 来声明函数。含有函数的类是抽象类,无法实例化,只能用作基类。...派生类必须实现(覆盖)抽象类函数,否则它们也会成为抽象类。 4. 有了解C++的shared_ptr 吗?

15810

C++多态原理及实例

基于类继承,基类的函数前加上virtual关键字,这样派生类重写该函数后,运行时将会根据对象的实际类型来调用相应的函数。...用virtual关键字申明的函数叫做函数函数肯定是类的成员函数多态性是一个接口多种实现,是面向对象的核心,分为类的多态性函数多态性。...函数:virtual void fun()=0;即抽象类!必须在子类实现这个函数,即先有名称,没有内容,派生类实现内容。 函数概念 函数基类中使用关键字 virtual 声明的函数。...派生类重新定义基类定义的函数时,会告诉编译器不要静态链接到该函数。 我们想要的是程序任意点可以根据所调用的对象类型来选择调用函数,这种操作被称为动态链接,或后期绑定。...函数定义 您可能想要在基类定义函数,以便在派生类重新定义该函数更好地适用于对象,但是您在基类又不能对函数给出有意义的实现,这个时候就会用到函数

34210
领券