C++ 虚函数

如下

//父类定义的display方法没有virutal关键字,则子类调用其display方法时,实际上会执行父类的方法.子类运行该方法,结果将不会输出payment
//父类定义该方法时如果加上virtual关键字,则子类运行结果将会输出payment

//但是有几个问题需要思考
//1.如果父类没有实现该方法,且定义时没有加上virtual关键字 结果:编译不过
//2.如果父类没有实现该方法,且定义有加上virtual关键字 结果:编译不过
//关于以上两点,结论是,只有纯虚函数才能在父类中也不实现.关于纯虚函数的细节暂不清楚,既然是以使用为目的,其他的特性以后遇到的时候再来了解

#include"stdafx.h"
#include<iostream>
#include<string>
using namespace std;

class Student 
{
public:
    Student(int num, string name, float score);
    virtual void display();
protected:
    int num;
    string name;
    float score;
};

Student::Student(int num, string name, float score) 
{
    this->num = num;
    this->name = name;
    this->score = score;
}

void Student::display() 
{
    cout << " num: " << this->num;
    cout << " name: " << this->name;
    cout << " score: " << this->score << endl;
}

class Graduate : public Student 
{
private:
    float payment;
public:
    Graduate(int num, string name, float score, float payment);
    void display();
};
Graduate::Graduate(int num, string name, float score, float payment) :Student(num, name, score), payment(payment) {}

void Graduate::display() {
    cout << " num: " << this->num;
    cout << " name: " << this->name;
    cout << " score: " << this->score;
    cout << " payment: " << this->payment << endl;
}

int main() {
    Student stu1(1001, "Li", 87.5);
    Graduate gra1(2001, "Wang", 98.5, 10000);

    Student *pt = &stu1;
    pt->display();
    pt = &gra1;
    pt->display();
    cin.get();
    return 0;
}

输出:

num: 1001 name: Li score: 87.5
num: 2001 name: Wang score: 98.5 payment: 10000

相关推荐