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

继承

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

继承的访问修饰

基类中 继承方式 子类中
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 
void myswap(T& a, T& b){
    T tmp = 0;
    tmp = a;
    a = b;
    b = tmp;
}

模版类

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

void main(){
    A a(6);
    system("pause");
}

你可能感兴趣的:(C++继承,多态,模版函数)