如下
//父类定义的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