一道理解虚函数(多态)机制的题目

Posted peter-fight

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一道理解虚函数(多态)机制的题目相关的知识,希望对你有一定的参考价值。

一道理解虚函数(多态)机制的题目(摘抄)

以下程序输出为

class Base 
    public:
    Base(int j): i(j)  
    virtual~Base() 
    void func1() 
        i *= 10;
        func2();
    
    int getValue() 
        return  i;
    
    protected:
    virtual void func2() 
        i++;
    
    protected:
    int i;
;
class Child: public Base 
    public:
    Child(int j): Base(j) 
    void func1() 
        i *= 100;
        func2();
    
    protected:
    void func2() 
        i += 2;
    
;
int main() 
    Base * pb = new Child(1);
    pb->func1();
    cout << pb->getValue() << endl; delete pb; 

答案:12

//
Base * pb = new Child(1), 首先创建子类对象,初始化为1,但是pb是BASE类型;
func1()不是虚函数,所以pb->func1()执行的是基类的func1函数,i= 10,然后调用func2()函数;
这里的func2是虚函数要往下派生类寻找,找到后执行派生类中的func2(),此时,i = 12;
最后执行pb->getValue(),结果为12
---------------------
作者:小人物_cipher
来源:CSDN
原文:https://blog.csdn.net/u012605629/article/details/43709613

 

以上是关于一道理解虚函数(多态)机制的题目的主要内容,如果未能解决你的问题,请参考以下文章

深入理解C++ 虚函数表

C++对象模型

C++之虚函数和多态

c++ 深入理解虚函数

C++_多态(深入理解虚函数表)

C++ 虚函数