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 <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++类和对象 C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核心...
    863cda997e42阅读 675评论 0 4
  • Android NDK开发之旅 目录 C++ 继承 面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一...
    香沙小熊阅读 1,164评论 0 0
  • 继承和多态 1. 继承的优缺点 优点:(1)子类可以灵活地改变父类中的已有方法;(2)能够最大限度的实现代码重用。...
    MinoyJet阅读 647评论 0 0
  • C++ 继承 面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个...
    苏州丸子阅读 3,237评论 0 5
  • 烽火难撩美靥霜,乱军激动女眉扬; 自卿一笑江河醉,却使诳帝山下殇。 (新韵)
    文竹居士阅读 335评论 0 0