虚函数与纯虚函数的代码解读——2

#include <iostream>

#include <string>

#include <assert.h>
#include <cstring>

#include <unistd.h>
#include <sys/types.h>
#include <signal.h>


using namespace std;

class Base
{
public:
    Base() {cout << "Base con" << endl;}
    virtual ~Base()
    {
        cout << "Base destructor" << endl;
    }
    virtual void Hiberarchy() const = 0;
};

void Base::Hiberarchy() const//pure virtual also can have function body
{
    cout << "Base::Hiberarchy" << endl;
}


class Derived : public Base
{
public:
    Derived() {cout << "Derived con" << endl;}
    virtual void Hiberarchy() const
    {
        Base::Hiberarchy();
        cout << "Derived::Hiberarchy" << endl;
    }

//    virtual ~Derived()
    ~Derived()
    {
        cout << "Derived destructor" << endl;
    }
    virtual void foo(){cout << "Derived foo()" << endl;}
};

int main()
{
    Base *pb = new Derived();
    pb->Hiberarchy();
    pb->Base::Hiberarchy();

    delete pb;
    Derived derivedObj;
    derivedObj.foo();
    //cout <<  << endl;
    return 0;
}



				
时间: 2024-11-05 11:38:15

虚函数与纯虚函数的代码解读——2的相关文章

C++ 虚函数与纯虚函数 浅析

[摘要] 本文首先简述虚函数与纯虚函数的定义,然后分析比较两者的区别与联系(DWS). [正文] 1)虚函数与纯虚函数有什么区别? 虚函数,不代表函数为不被实现的函数,为了允许用基类的指针来调用子类的这个函数:允许被其子类重新定义的成员函数. 纯虚函数,才代表函数没有被实现,为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数. 2)虚就虚在所谓"推迟联编"或者"动态联编"上,一个类函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的.

虚函数和纯虚函数

虚函数为了重写和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数! 纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数! 1.动态绑定 在执行期间(非编译期)判断所引用对象的实际类型,根据实际类型(动态类型)调用相应的方法. 动态绑定灵活性相对静态绑定来说要高,因为它在运行之前可以进行选择性的绑定,但同时,动态绑定的执行效率要低些,因为绑定对象还要进行编译(现在编译期一般都会多次编译). 触发动态绑定的条件:(1)只有指定为虚函数

【C++】C++中的虚函数与纯虚函数

C++中的虚函数 先来看一下实际的场景,就很容易明白为什么要引入虚函数的概念.假设我们有一个基类Base,Base中有一个方法eat:有一个派生类Derived从基类继承来,并且覆盖(Override)了基类的eat:继承表明ISA(“是一个”)的关系,现在我们有一个基类的指针(引用)绑定到派生类对象(因为派生类对象是基类的一个特例,我们当然可以用基类指针指向派生类对象),当我们调用pBase->eat()的时候,我们希望调用的是Derived类的eat,而实际上调用的是Base类的eat,测试

C++ 虚函数 、纯虚函数、接口的实用方法和意义

也许之前我很少写代码,更很少写面向对象的代码,即使有写多半也很容易写回到面向过程的老路上去.在写面向过程的代码的时候,根本不管什么函数重载和覆盖,想到要什么功能就变得法子的换个函数名字,心里想想:反正函数重载本质也就是入栈了两个不同的函数. 回过头来讲,让我了解标题这三个概念的实际用处,还是在于我这第四次重写毕业论文的代码,将它改写成面向对象的时候,才理解的.在面向对象设计的过程中, 类是从抽象逐渐具体起来的,父类可以是非常非常抽象的东西,而最终实例化的子类就非常具体了.在这个继承的过程中,不断

转 理解虚基类、虚函数与纯虚函数的概念

原文地址:理解虚基类.虚函数与纯虚函数的概念 引言 一直以来都没有写过一篇关于概念性的文章,因为我觉得这些概念性的东西书本上都有并且说的也很详细写来也无用,今天突发奇想想写 一写,下面就和大家讨论一下虚基类.虚函数与纯虚函数,一看名字就让人很容易觉得混乱.不过不要紧待看完本文后你就会理解了. 正文 虚基类        在说明其作用前先看一段代码 class A { public:     int iValue; }; class B:public A { public:     void bP

虚函数和纯虚函数的区别

首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数.定义他为虚函数是为了允许用基类的指针来调用子类的这个函数.定义一个函数为纯虚函数,才代表函数没有被实现.定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数.1.简介假设我们有下面的类层次: class A { public: virtual void foo() { cout<<"A::foo() is called"<<endl; } }; class

C++中虚函数和纯虚函数的总结

虚函数与纯虚函数 在他们的子类中都可以被重写.它们的区别是:(1)纯虚函数只有定义,没有实现:而虚函数既有定义,也有实现的代码. 纯虚函数一般没有代码实现部分,如virtual void print() = 0; 而一般虚函数必须要有代码的实现部分,否则会出现函数未定义的错误.virtual void print(){ printf("This is virtual function\n"); }(2)包含纯虚函数的类不能定义其对象,而包含虚函数的则可以. 定义为虚函数是为了允许用基类

C++虚函数和纯虚函数的区别

虚函数和纯虚函数都可以在子类中被重写,区别在于: 一般来说,纯虚函数只有定义没有实现,例如: virtual bool Init(void)=0: 而一般虚函数必须要有代码的实现部分,否则会出现函函数未定义的错误 其次: 只要类中有一个是纯虚函数,那么他就是一个抽象类,是不能生成对象的,如果只是虚函数,那么是可以定义生成具体的对象的.

c++ 基础(七) 函数覆盖,虚函数,纯虚函数对比

1.函数覆盖 ClassA , ClassB ,其中ClassB继承ClassA 类定义如下: #ifndef _CLASSA_H #define _CLASSA_H #include <iostream> using namespace std; class ClassA { public: ClassA(void); ~ClassA(void); void method(); }; #endif #include "stdafx.h" #include "Cl

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

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