• 和菜鸟一起学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时候的运行结果吧。

             貌似那个Gradutedisplay函数没用调用呢。

            再看看加了virual时候的运行结果吧:

            有了,那个pay打印出来了。看来virtual的功能就是这个了。通过这例子,相信应该可以很好地理解了,不过,还得理论点。从实践到理论可能更加深刻的记住它。

            在同一个类中,我们是不能定义两个名字相同、参数个数和类型格式都相同的函数的,这叫做什么?貌似是重复定义了。但是在继承中,是可以存在的。不过那样只会调用基类的函数。而虚函数这个时候上场了,他的作用就是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或者引用来访问基类和派生类中的同名函数。

            就这样了,终于记下来了,相信以后忘了看看这里马上可以理解了,哈哈哈。。。。。。

     

  • 相关阅读:
    云原生时代,微服务到底应该怎么玩儿?
    坐上机器猫的时光机,来一场科技穿越之旅吧
    喜讯|京东荣获2019 【中国技术品牌影响力企业】
    非洲正在打造一个与硅谷完全不同的人工智能产业
    DevOps专题|基础Agent部署系统
    《编写可读代码的艺术》总结
    《Effective Java第二版》总结
    MySQL之备份和还原
    MySQL之Xtrabackup的使用
    MySQL之mysqldump的使用
  • 原文地址:https://www.cnblogs.com/wuyida/p/6300080.html
Copyright © 2020-2023  润新知