zoukankan      html  css  js  c++  java
  • virtual>function

    如果基类和派生类都定义了"相同名称的成员函数",那么通过对象指针调用成员函数时,到底调用哪个函数,要根据该指针的原始类型而定,而不是视指针实际所指的对象类型而定。
     如果用了虚函数,这些情况就不存在了。
    虚函数的总结:
      1.如果想在派生类中重新定义一个成员函数,那么就应该在基类中把该函数设为"virtual"2.以单一指令调用不同函数(这句话不好理解,下面会解释),这种性质就是"多态"3.虚函数是C++语言的多态性质和动态绑定的关键。
      4.既然抽象类中的虚函数不打算被调用,我们就不应该定义它,应该把它设为纯虚函数(在函数声明后加上"=0"即可)。
      5.拥有纯虚函数的类叫做抽象类,不能产生出对象实例,但是可以拥有指向抽象类的指针,以便于操作抽象类的各个派生类。
      6.虚函数派生下去仍是虚函数,而且可以省略virtual关键词
    核心理念就是通过基类访问派生类定义的函数。

    #include <iostream>

    using namespace std;

    class Person{
        public:
            Person(int x):age(x){cout<<"Person::"<<endl;}
            ~Person(){cout<<"~Person()"<<endl;}
            int  get(){return age;}
            virtual void print(){ cout<<age<<endl;}
            void show(){ cout<<age<<endl;}

        private :
            int age;
    };
    class Man:public Person{
        public:
            Man(int y,bool x):Person(y){male = x;cout<<"Man::"<<endl;}
            ~Man(){cout<<"~Man()"<<endl;}
            bool get(){return male;}
            void print(){if(male)
                        cout<<"This is a male!"<<endl;
                    else
                        cout<<"Not male!"<<endl;}
            void show(){if(male)
                        cout<<"This is a male!"<<endl;
                    else
                        cout<<"Not male!"<<endl;}
        private:
            bool male;
    };

    int main(){
        Person  *p=new Man(10,true);

        dynamic_cast<Man*>(p)->show();
        p->print();
        p->show();
    }

  • 相关阅读:
    二分法查找
    重构方法之一:提炼方法(Extract Method)读书笔记
    使用SQL命令手动写入Discuz帖子内容
    调整linux系统时间和时区
    怎样给访问量过大的mysql数据库减压
    MySQL提示“too many connections”的解决办法
    CentOS 6安装php加速软件Zend Guard
    CmsTop 大众版运行环境搭建 (CentOS+Nginx+PHP FastCGI)
    LEMP构建高性能WEB服务器(CentOS+Nginx+PHP+MySQL)
    CentOS-6.3安装配置Nginx
  • 原文地址:https://www.cnblogs.com/zhangsf/p/2751193.html
Copyright © 2011-2022 走看看