zoukankan      html  css  js  c++  java
  • 重写与多态(重写的两个错误)

    重写:1.在父子类中,子类重写父类函数    2.函数名同名  3.参数相同  4.父类的同名必须有virtual

    重写是动态联编,根据或引用实际指向的对象决定调用哪个类的函数

    多态:调用同名函数时,由于参数不同(重载)或由于所调用的对象(重写)不同造成调用结果不同

    重载和重写的区别:1.范围不同  2.参数要求不一样(重载:参数不同 重写:参数必须一样)  3.virtual要求不同  4.重载是静态联编,重写是动态联编

    重写的两种错误:

    1.子类与父类函数名相同,参数相同,但是父类没有virtual,只能发生静态联编  //没有编译错误 但是达不到效果

    2.子类与父类函数名相同,参数不同,都是静态联编

    class Parent
    {
    public:
    
        Parent()
        {
            cout<<"Parent()"<<endl;
            this->privata_data =0;
        }
        Parent(int k)
        {
            this->privata_data =k;
        }
    
        virtual void show(int p) //加上virtual就是动态联编了
        {
            cout<<"Parent:show"<<this->privata_data<<endl;
        }
        void setPrivatadata(int a)
        {
            this->privata_data = a;
        }
    
    int privata_data;
    };
    
    class Sub:public Parent
    {
    public:
        Sub()
        {
            cout<<"Sub()"<<endl;
            this->name = " ";
        }
    
        Sub(const string &name,int k=0):Parent(k)
        {
            cout<<"Sub(const string &name,int k=0):Parent(k"<<endl;
            this->name = name;
        }
        void show(string &name)
        {
            cout<<"Sub:show"<<this->name<<endl;
        }
    
        ~Sub()
        {
            cout<<"~Sub()"<<endl;
        }
    
    private:
        string name;
    };
    
    void showData(Parent *p)
    {
        p->show();
    }
      
    int main(int argc, char *argv[])
    {
    #if 1
        Parent *p = new Sub;//父类指针指向子类对象
        p->show();//静态联编,结果是调用父类的show函数
        delete p;
    #endif
    #if 1
        Parent *p = new Sub;
        p->show("xiaoli");  
        delete p;
    #endif
    }

    参数不同,此时不管父类有没有virtual都会被屏蔽掉

  • 相关阅读:
    可扩容分布式session方案
    Linux 极限压缩
    python调用jenkinsAPI
    Jenkins-slave分布式跨网络发布
    mysql查看指定数据库各表容量大小
    FastAPI--依赖注入之Depends(8)
    FastAPI--跨域处理(7)
    FastAPI--中间件(6)
    FastAPI--错误处理(5)
    FastAPI--响应报文(4)
  • 原文地址:https://www.cnblogs.com/xiaozoui11cl/p/12767491.html
Copyright © 2011-2022 走看看