作者共發了2篇帖子。 內容轉換:不轉換▼
 
點擊 回復
348 1
【理解】虚函数的理解
一派護法 十九級
1樓 發表于:2016-4-8 18:40
【不用虚函数的情况】
在下面的程序中,声明一个基类的指针变量,指向子类的实例,但是调用时却只能调用父类的Show函数:
#include "stdafx.h"
#include <iostream>

using namespace std;

class Person
{
public:
    char name[20];
    void Show(void);
};

void Person::Show(void)
{
    cout << "I don't want to tell you my name." << endl;
}

class Student : public Person
{
public:
    void Show(void);
};

void Student::Show(void)
{
    cout << "My name is " << name << "." << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
    // 直接调用Show函数,正常
    Student stu;
    strcpy_s(stu.name, "Tony");
    stu.Show();
    
    // 用子类的指针调用Show函数,正常
    Student *pStu = &stu;
    pStu->Show();

    // 用父类的指针调用Show函数,不正常!
    Person *pPerson = &stu;
    pPerson->Show();

    return 0;
}
【运行结果】
My name is Tony.
My name is Tony.
I don't want to tell you my name.
一派護法 十九級
2樓 發表于:2016-4-8 18:42
此时,只需要把父类的Show函数声明为虚函数,就能解决父类指针不能调用子类方法的问题:

运行结果:

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:348 回複數:1
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2016-4-8 18:42
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用共享創意姓名標示-相同方式分享 3.0 Unported許可協議進行許可。