和菜鸟一起学c++之虚函数
清晨的微风总是那么舒适,午后的阳光却那么让人烦躁,每周末都在公司里度过,不知道是对是错。与其一个人在小小的屋子呆着,选择公司看书是不是明智的选择呢?抑或找各种同学一起玩?玩?哈哈。始终记得今天所做的将决定3年后的你。成功者都是孤独的,唯有孤独,才可以静下来,唯有静下来,我们才能更好的去学习,去领悟,去思考,去感受。静以修身、俭以养德。非淡泊无以明志、非宁静无以致远。恩,对于别人的玩乐,不用羡慕,不用嫉妒,更不用恨,书山有路勤为径、学海无涯苦作舟。更何况,学软件,学嵌入式的要懂的知识太多太多了,而这个时代是知识经济时代,唯有不断学习,不断创新才可以利于不败之地。可是这样是不是又缺少些什么呢?生活会不会太过单调了呢?也许吧。相信自己选择的是对的。。
感悟了下,然后把上次看的C++的虚函数给记录下吧。以前上课的时候知道的,后来不用就给忘了,太懒了以前没有记下来。好了,下面的代码是根据谭浩强老师的书打出来的。
#include <iostream> #include <string> using namespace std; class Student { public: Student(int mnum, string mname, float mscore):num(mnum),name(mname),score(mscore){} ~Student(){} virtual void display(); protected: int num; string name; float score; }; void Student::display() { cout << "num: " << num << endl; cout << "name: " << name << endl; cout << "score: " << score << endl; } class Graduate : public Student { public: Graduate(int mnum, string mname, float mscore, float mpay):Student(mnum, mname, mscore),pay(mpay){} ~Graduate(){} void display(); private: float pay; }; void Graduate::display() { cout << "num: " << num << endl; cout << "name: " << name << endl; cout << "score: " << score << endl; cout << "pay :" << pay << endl; } int main(void) { Student stu(1, "aaa", 90); Graduate gra(2, "bbb", 100, 1000); Student *pt = &stu; pt->display(); cout << endl; pt = &gra; pt->display(); return 0; }
上面的虚函数就是virtual void display();了,先看看如果没有virual时候的运行结果吧。
貌似那个Gradute的display函数没用调用呢。
再看看加了virual时候的运行结果吧:
有了,那个pay打印出来了。看来virtual的功能就是这个了。通过这例子,相信应该可以很好地理解了,不过,还得理论点。从实践到理论可能更加深刻的记住它。
在同一个类中,我们是不能定义两个名字相同、参数个数和类型格式都相同的函数的,这叫做什么?貌似是重复定义了。但是在继承中,是可以存在的。不过那样只会调用基类的函数。而虚函数这个时候上场了,他的作用就是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或者引用来访问基类和派生类中的同名函数。
就这样了,终于记下来了,相信以后忘了看看这里马上可以理解了,哈哈哈。。。。。。