纯虚函数也可以有内容,并被子类调用


#include <iostream.h>

class base {
public:
virtual void v() const = 0;
virtual void f() const = 0 { // 纯虚函数也有实现内容,但子类仍然必须实现这个虚函数
cout << "base::f()\n";
}
};

void base::v() const { cout << "base::v()\n";} // 实现函数写在类的外部

class d : public base {
public:
// Use the common base code:
void v() const { base::v(); } // 纯虚函数也可被子类调用
void f() const { base::f(); }
};

main() {
d D;
D.v();
D.f();
}

输出结果:

base::v()
base::f()

纯虚函数也可以有内容,并被子类调用,布布扣,bubuko.com

时间: 2024-11-22 20:46:47

纯虚函数也可以有内容,并被子类调用的相关文章

纯虚函数和抽象类

-------------------siwuxie095 纯虚函数 在 C++ 中,用 纯 字来修饰虚函数,即 纯虚函数 纯虚函数没有函数体,同时在定义时,函数名的后边要加 =0 看如下实例: 纯虚函数在虚函数表中的实现: 如果定义了一个 Shape 类,因为其中有虚函数和纯虚函数, 所以 Shape 类一定有一个虚函数表,当然,也就会有一个 虚函数表指针 在虚函数表中,如果是一个普通虚函数,则对应的函数指针 就是一个有意义的值,如果是一个纯虚函数,则对应的函数 指针的值就是 0 抽象类 纯虚

纯虚函数_抽象类

解耦合 和 模块的划分 c++没有接口的概念  但可以使用纯虚函数(抽象类)实现接口的功能 纯虚函数和抽象类纯虚函数是一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都定义自己的版本纯虚函数为各派生类提供一个公共界面(接口的封装和设计,软件的模块功能更划分) 纯虚函数说明形式: virtual 类型 函数名(参数表)= 0: 含有纯虚函数的基类 称为抽象类. class shape { point center; public: virtual void rotate(int)=0;

虚函数与纯虚函数--定义问题

部分转自http://blog.csdn.net/qq_20949431/article/details/70740488 1. 虚函数的声明和定义具体关于虚函数的知识不做多讲,我在定义一个抽象类时,忘了将一个虚函数声明为 纯虚函数,又没有对其定义, 导致编译报错时报错如下:undefined reference to `vtable for Fibonacci'错误提示的很明显,就是无法生成虚函数表. 我们知道,虚函数表(地址)在定义了虚函数的类所实例化的对象内存中的第一个位置,也就是在实例化

一口气搞懂《虚函数和纯虚函数》

学习C++的多态性,你必然听过虚函数的概念,你必然知道有关她的种种语法,但你未必了解她为什么要那样做,未必了解她种种行为背后的所思所想.深知你不想在流于表面语法上的蜻蜓点水似是而非,今天我们就一起来揭开挡在你和虚函数(女神)之间的这一层窗户纸. 首先,我们要搞清楚女神的所作所为,即语法规范.然后再去探究她背后的逻辑道理.她的语法说来也不复杂,概括起来就这么几条: 在类成员方法的声明(不是定义)语句前面加个单词:virtual,她就会摇身一变成为虚函数. 在虚函数的声明语句末尾中加个 =0 ,她就

一个例子搞懂C++的虚函数和纯虚函数

转自https://blog.csdn.net/vincent040/article/details/78848322,并对代码做了小幅修正,在此感谢原作者. 学习C++的多态性,你必然听过虚函数的概念,你必然知道有关她的种种语法,但你未必了解她为什么要那样做,未必了解她种种行为背后的所思所想.深知你不想在流于表面语法上的蜻蜓点水似是而非,今天我们就一起来揭开挡在你和虚函数(女神)之间的这一层窗户纸. 首先,我们要搞清楚女神的所作所为,即语法规范.然后再去探究她背后的逻辑道理.她的语法说来也不复

一个例子彻底搞懂C++的虚函数和纯虚函数

学习C++的多态性,你必然听过虚函数的概念,你必然知道有关她的种种语法,但你未必了解她为什么要那样做,未必了解她种种行为背后的所思所想.深知你不想在流于表面语法上的蜻蜓点水似是而非,今天我们就一起来揭开挡在你和虚函数(女神)之间的这一层窗户纸. 首先,我们要搞清楚女神的所作所为,即语法规范.然后再去探究她背后的逻辑道理.她的语法说来也不复杂,概括起来就这么几条: 1.在类成员方法的声明(不是定义)语句前面加个单词:virtual,她就会摇身一变成为虚函数: 2.在虚函数的声明语句末尾中加个 =0

Hello,C++(5)纯虚函数和抽象类

纯虚函数和抽象类 下面通过一个例子来说明纯虚函数的定义方法 在这个类当中,我们定义了一个普通的虚函数,并且也定义了一个纯虚函数.那么,纯虚函数是什么呢??从上面的定义可以看到,纯虚函数就是没有函数体,同时在定义的时候,其函数名后面要加上“= 0”. 纯虚函数的实现原理 本节从虚函数表的角度来说明纯虚函数的实现原理. 上面就是我们在前面课程讲到的多态的实现原理,在讲这一部分的时候,讲到了虚函数表以及虚函数表指针.如果我们定义了Shape这样的类,那么,Shape类当中,因为有虚函数和纯虚函数,所以

C++:抽象基类和纯虚函数的理解

转载地址:http://blog.csdn.net/acs713/article/details/7352440 抽象类是一种特殊的类,它是为了抽象和设计的目的为建立的,它处于继承层次结构的较上层. ⑴抽象类的定义: 称带有纯虚函数的类为抽象类. ⑵抽象类的作用: 抽象类的主要作用是将有关的操作作为结果接口组织在一个继承层次结构中,由它来为派生类提供一个公共的根,派生类将具体实现在其基类中作为接口的操作.所以派生类实际上刻画了一组子类的操作接口的通用语义,这些语义也传给子类,子类可以具体实现这些

Bug:C++运行时调用纯虚函数

昨天服务器宕机,打印出的日志非常诡异,宕在纯虚函数调用处.    日志显示,战斗对象的虚函数调用,前几次正常,某个时刻过后"丧失多态"了,直接调到父类虚函数处,引发纯虚函数宕机.    且win平台下运行正常,上linux必跪,老项目linux工具不全,debug版本都编不出来,只有Log:windows下还复现不出来. 找这个bug的过程还是蛮有意思的.记录下(*^__^*) 以往没碰到过这种Bug,起初当然毫无头绪.    首先想到,c++中经常的内存改写,但能正常调用到普通虚函数