美文网首页
C++继承,多态,模版函数

C++继承,多态,模版函数

作者: 潇洒人生_cca2 | 来源:发表于2020-04-05 10:36 被阅读0次

    继承

    代码的重用性
    父类构造函数先调用,子类的析构函数先调用
    父类和子类有重名的函数,是覆盖,并非多态

    继承的访问修饰

    基类中 继承方式 子类中
    public & public继承 = > public
    public & protected继承 = > protected
    public & private继承 = > private
    protected & public继承 = > protected
    protected & protected继承 = > protected
    protected & private继承 = > private
    private & public继承 = > 子类无权访问
    private & protected继承 = > 子类无权访问
    private & private继承 = > 子类无权访问

    class Human{
    public:
        Human(char* name, int age){
            this->name = name;
            this->age = age;
        }
        void say(){
            cout << "说话" << endl;
        }
    protected:
        char* name;
        int age;
    };
    //男人
    class Man : public Human{
    public:
        //给父类构造函数传参,同时给属性对象赋值,":"后面第一个表明调用父类哪个构造方法,接下来是给属性对象赋值
        Man(char *brother, char *s_name, int s_age, char *h_name, int h_age) : Human(s_name, s_age), h(h_name,h_age){
            this->brother = brother;
        }
        //泡妞
        void chasing(){
            cout << "泡妞" << endl;
        }
    private:
        //兄弟
        char* brother;
        Human h;
    };
    
    void main(){
        Man m1("danny","jack",18,"jason",18);
        m1.Human::say();//调用父类的方法
        m1.Human::age = 10;
        system("pause");
    }
    

    继承二异性

    虚继承,不同路径继承来的同名成员只有一份拷贝,解决不明确的问题

    多态

    多态(程序的扩展性)
    动态多态:程序运行过程中,决定哪一个函数被调用(重写)
    静态多态:重载

    发生动态的条件:

    1.继承
    2.父类的引用或者指针指向子类的对象
    3.函数的重写(需要用virtual修饰方法)

    纯虚函数(抽象类)

    1.当一个类具有一个纯虚函数,这个类就是抽象类
    virtual void sayArea() = 0;//纯虚函数
    2.抽象类不能实例化对象
    3.子类继承抽象类,必须要实现纯虚函数,如果没有,子类也是抽象类
    抽象类的作用:为了继承约束,根本不知道未来的实现

    接口

    只是逻辑上的划分,语法上跟抽象类的写法没有区别

    可以当做一个接口
    class Drawble{
        virtual void draw();
    };
    

    模板函数(泛型)

    根据实际类型自动推导

    //发现:这两个函数业务逻辑一样,数据类型不一样
    template <typename T>
    void myswap(T& a, T& b){
        T tmp = 0;
        tmp = a;
        a = b;
        b = tmp;
    }
    

    模版类

    template<class T>
    class A{
    public:
        A(T a){
            this->a = a;
        }
    protected:
        T a;
    };
    //继承模版类
    class B : public A<int>{
    public:
        B(int a,int b) : A<int>(a){
            this->b = b;
        }
    private:
        int b;
    };
    //模版类继承模版类
    template <class T>
    class C : public A<T>{
    public:
        C(T c, T a) : A<T>(a){
            this->c = c;
        }
    protected:
        T c;
    };
    
    void main(){
        A<int> a(6);
        system("pause");
    }
    

    相关文章

      网友评论

          本文标题:C++继承,多态,模版函数

          本文链接:https://www.haomeiwen.com/subject/vjucdctx.html