zoukankan      html  css  js  c++  java
  • C++的多态与虚函数

    多态性:对于同一消息,不同的对象由不同的响应方式

    多态分为静态多态(编译时多态)和动态多态(运行时多态),动态多态通过虚函数来实现。

    覆盖-->子类和父类中有同名同参数列表但是功能不同的函数叫做覆盖,在同一个类中有相同的是重复定义,不是覆盖。

    虚函数的使用方法,如下:

    ①在基类中声明一个函数为虚函数,如:

    //基类vStudent
    class vStudent {
    public:
    	vStudent(int,string);
    	virtual void display();//虚函数,用来实现多态性,在定义时无需声明其为虚函数(virtual关键字不写)
    protected:
    	int num;
    	string name;
    };
    
    vStudent::vStudent (int a,string b): num(a),name(b) {};
    
    void vStudent::display() {//在定义时无需声明其为虚函数(virtual关键字不写)
    	cout<<name<<" is "<<num<<endl;
    };
    

    ②在派生类中定义一个同名同参数列表同类型的函数,该函数会被自动识别为虚函数,virtual关键字可写可不写,如:

    //派生类vGraduate
    class vGraduate: public vStudent {
    public:
    	vGraduate(int,string,double);
    	virtual void display();//由于基类中的同名函数为虚函数,此派生类中的该函数自动成为虚函数,不用特意声明(virtual可有可无,习惯加上,程序更清晰)。
    private:
    	double pay;
    };
    
    vGraduate::vGraduate(int a,string b,double c): vStudent(a,b),pay(c) {};
    
    void vGraduate::display() {
    	cout<<name<<" is "<<num<<".His pay is "<<pay<<endl;
    };
    

    ③在主函数中的调用,如下:

    int main() {
    	vStudent vs(1,"zhangsan");
    	vGraduate vg(2,"lisi",9000);
    	vStudent *pvs;//定义一个指向基类对象的指针变量pvs
    	pvs = &vs;//指向基类对象vs
    	pvs->display();//调用基类中的display函数
    	pvs = &vg;//指向基类对象vg
    	pvs->display();//调用派生类中的display函数
    
    	return 0;
    };
    

     基类的析构函数一般都是要声明为虚函数的!当delete指向派生类的指针时比较方便。

    注意,纯虚函数,包含纯虚函数的类都是抽象类,抽象类是不能生成对象的

    纯虚函数声明方式:

    virtual 函数类型 函数名 (参数列表) =0;

    抽象类: 不用来定义对象而只是作为一种基本类型用作继承的类称为抽象类!

  • 相关阅读:
    shiro整合springmvc
    HashMap中的位运算
    jedis的scan操作要注意cursor数据类型
    DispatcherServlet的url-pattern尽量不要配置为"/*"
    解决阿里云ECS下kubeadm部署k8s无法指定公网IP(作废)
    win10下使用mklink命令给C盘软件搬家
    Ubuntu管理软件源
    C++ 自增、自减运算符的重载和性能分析
    C++ 流插入"<<"和流提取">>"运算符的重载
    C++ 手把手教你实现可变长的数组
  • 原文地址:https://www.cnblogs.com/DARKDD/p/3780949.html
Copyright © 2011-2022 走看看