ElevHe

博客园 首页 新随笔 联系 订阅 管理

vector.clear()  将 size 设置为0,capacity 不变

 

继承

//公共页面
class BasePage
{
public:
    void header()
    {
        cout << "首页、公开课、登录、注册...(公共头部)" << endl;
    }

    void footer()
    {
        cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
    }
    void left()
    {
        cout << "Java,Python,C++...(公共分类列表)" << endl;
    }

};

//Java页面
class Java : public BasePage
{
public:
    void content()
    {
        cout << "JAVA学科视频" << endl;
    }
};
//Python页面
class Python : public BasePage
{
public:
    void content()
    {
        cout << "Python学科视频" << endl;
    }
};
//C++页面
class CPP : public BasePage
{
public:
    void content()
    {
        cout << "C++学科视频" << endl;
    }
};

void test01()
{
    //Java页面
    cout << "Java下载视频页面如下: " << endl;
    Java ja;
    ja.header();
    ja.footer();
    ja.left();
    ja.content();
    cout << "--------------------" << endl;

    //Python页面
    cout << "Python下载视频页面如下: " << endl;
    Python py;
    py.header();
    py.footer();
    py.left();
    py.content();
    cout << "--------------------" << endl;

    //C++页面
    cout << "C++下载视频页面如下: " << endl;
    CPP cp;
    cp.header();
    cp.footer();
    cp.left();
    cp.content();


}

 继承的好处:减少重复的代码

继承方式:

1.公共继承

2.保护继承

3.私有继承 

#include <iostream>
#include <string>

using namespace std;

/*继承有三种形式
1.公共继承  
2.保护继承
3.私有继承

继承方式                    private继承           protected继承             public继承
基类的 private 成员         不可见                不可见                    不可见
基类的 protected 成员       变为private成员       仍为protected成员         仍为protected成员 
基类的 public 成员          变为private成员       变为protected成员         仍为public成员

1.public 公共权限    类内可访问,类外可访问

2.protected 保护权限   类内可访问,类外不可访问,儿子可以访问父亲中的保护内容

3.private 私有权限    类内可访问,类外不可访问,儿子不可以访问父亲的隐私内容
*/

class father {
public:
    string m_name;
protected:
    int m_age;
private:
    int m_passwoard;
};

class son_1 :public father {
    void func() {
        cout << m_name;
        cout << m_age;
        // cout << m_password; 未定义的标识符
    }
};

class son_2 :protected father {
    void func() {
        cout << m_name;
        cout << m_age;
        // cout << m_password; 未定义的标识符
    }
};

class son_3 :private father {
    void func() {
        cout << m_name;
        cout << m_age;
        // cout << m_password; 未定义的标识符
    }
};


int main()
{
    son_2 s2;
    // s2.m_name; 全为保护权限,只可类内访问,类外无法访问
    return 0;
}

 

继承中的对象模型

#include <iostream>
#include <string>

using namespace std;

class Base {
public:
    int m_A;
protected:
    int m_B;
private:
    int m_C; // 还会继承下去,只是无法访问
};

class son :public Base {
public:
    int m_D;
};

int main()
{
    son s1;
    cout << sizeof(s1) << endl;
    system("pause");
    return 0;
}

// 输出为16

 

继承中的构造和析构顺序

#include <iostream>
#include <string>

using namespace std;

class Base {
public:
    Base() {
    // 与其类具有相同名字的成员函数必为构造函数
        cout << "Base 构造函数" << endl;
    }

    ~Base() {
    // 析构函数(destructor)是成员函数的一种,它的名字与类名相同,但前面要加~,没有参数和返回值
        cout << "Base 析构函数" << endl;
    }

};

class Son :public Base {
public:
    Son() {
        // 与其类具有相同名字的成员函数必为构造函数
        cout << "Son 构造函数" << endl;
    }

    ~Son() {
        // 析构函数(destructor)是成员函数的一种,它的名字与类名相同,但前面要加~,没有参数和返回值
        cout << "Son 析构函数" << endl;
    }

};

int main()
{
    Base b1;
    cout << "--------------------" << endl;
    Son s1;
    cout << "--------------------" << endl;
    return 0;
}

输出结果

Base 构造函数
--------------------
Base 构造函数
Son 构造函数
--------------------
Son 析构函数
Base 析构函数
Base 析构函数

构造时,先有父类,再有子类;析构时,先析构子类,在析构父类。

 

继承同名成员处理方式

1.访问子类同名成员,直接访问即可

2.访问父类同名成员,需要加作用域

 

继承中,同名的静态成员的处理方式

静态成员和非静态成员出现同名,处理方式相同

1.访问子类同名成员,直接访问即可

2.访问父类同名成员,需要加作用域

 

多继承语法

在C++中,一个类继承多个类是允许的

class 子类 : 继承方式 父类1 ,继承方式 父类2 

在实际开发中,不建议使用多继承

 

菱形继承

概念:两个派生类继承同一个基类,又有某个类同时继承这两个派生类,这种继承被称为菱形继承,或者钻石继承

 

posted on 2023-04-14 19:48  ElevHe  阅读(10)  评论(0编辑  收藏  举报