C++ 核心编程 继承

 

 

 

#include<iostream>
using namespace std;
//普通实现页面

//Java 页面
class Java {
public:
    void header() 
    {
        cout << "首页、公开课、登录、注册>>>>(公共头部)" << endl;
    
    }
    void footer()
    {
        cout << "帮助中心、合作(公共底部)" << endl;

    }
    void lest() 
    {
        cout << "Java python c++ (公共列表分类)" << endl;
    
    }
    void content()
    {
        cout << "Java 学科视频" << endl;
    
    }

};

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

    }
    void footer()
    {
        cout << "帮助中心、合作(公共底部)" << endl;

    }
    void lest()
    {
        cout << "Java python c++ (公共列表分类)" << endl;

    }
    void content()
    {
        cout << "Python 学科视频" << endl;

    }

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

    }
    void footer()
    {
        cout << "帮助中心、合作(公共底部)" << endl;

    }
    void lest()
    {
        cout << "Java python c++ (公共列表分类)" << endl;

    }
    void content()
    {
        cout << "C++ 学科视频" << endl;

    }

};
void test01()
{

    cout << "Java下载视频页面如下" << endl;
    Java ja;
    ja.header();
    ja.footer(); 
    ja.lest();
    ja.content();


    cout << "________________________" << endl;
    cout << "python下载视频页面如下" << endl;
    Python py;
    py.header();
    py.footer();
    py.lest();
    py.content();

    cout << "________________________" << endl;
    cout << "c++下载视频页面如下" << endl;
    CPlus c;
    c.header();
    c.footer();
    c.lest();
    c.content();
}

int main() {

    test01();

    system("pause");
    return 0;

}

继承的写法

#include<iostream>
using namespace std;
//普通实现页面

//继承实现页面
class BasePage {
    public:
        void header()
        {
            cout << "首页、公开课、登录、注册>>>>(公共头部)" << endl;
    
        }
        void footer()
        {
            cout << "帮助中心、合作(公共底部)" << endl;
    
        }
        void lest()
        {
            cout << "Java python c++ (公共列表分类)" << endl;
    
        }
};
//继承好处 :减少重复代码
//语法 :class 子类 : 继承方式 父类
//子类也称为派生类
//父类也称为 基类

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

    }
};
//CPlus 页面
class CPlus :public BasePage {
public:
    void content()
    {
        cout << "CPlus 学科视频" << endl;

    }
};


void test01()
{

    cout << "Java下载视频页面如下" << endl;
    Java ja;
    ja.header();
    ja.footer(); 
    ja.lest();
    ja.content();


    cout << "________________________" << endl;
    cout << "python下载视频页面如下" << endl;
    Python py;
    py.header();
    py.footer();
    py.lest();
    py.content();

    cout << "________________________" << endl;
    cout << "c++下载视频页面如下" << endl;
    CPlus c;
    c.header();
    c.footer();
    c.lest();
    c.content();
}

int main() {

    test01();

    system("pause");
    return 0;

}

 

 

 

 

#include<iostream>
using namespace std;

//继承方式 
//公共继承

class Base1 {
public:
    int m_A;
protected:
    int m_B;
private:
    int m_C;
};

//公有继承
class BaseA :public Base1 {
public:
    void func() {
    
        m_A = 10;//父类中的公共权限成员  到子类中依然是公共权限
        m_B = 10;//父类中保护权限成员 到子类中依然是保护权限 可以访问
        //m_C = 10;//父类中的私有权限成员  到子类中不可以访问
    }
};

void test01() {
    BaseA s1;
    s1.m_A = 100;
    //s1.m_B = 100;//成员函数在类内可以访问,在类外访问不到

}

class Base2 {
public:
    int m_A;
protected:
    int m_B;
private:
    int m_C;
};
//保护继承
class BaseB : protected Base2 {
public:
    void func() {

        m_A = 100;//父类中的公共成员  到子类中变为保护权限
        m_B = 100;//父类中保护权限成员 到子类中依然是保护权限 可以访问
        //m_C = 100;//m_C = 10;//父类中的私有成员子类中不可以访问
    }

};

void test02() {
    BaseB s1;
    //s1.m_A = 1000;//在BaseB中 m_A变为了保护权限  因此类外不可以访问
    //s1.m_B = 1000;//在BaseB中 m_B保护权限  类外不可以访问

}

class Base3 {
public:
    int m_A;
protected:
    int m_B;
private:
    int m_C;
};
//私有继承
class BaseC : private Base3{
public:
    void func() {

        m_A = 100;//父类中的公共成员  到子类中变为私有成员
        m_B = 100;//父类中保护权限成员 到子类中依然是私有成员
        //m_C = 100//m_C = 10;//父类中的私有成员子类中不可以访问
    }

};

class GrandSon3 :public Base3 {
public:
    void func() {
        //m_A = 100;//到了 Base3中   m_A变为私有  即使是儿子  也是访问不到
        //m_B = 100;//
    }

};
void test03() 
{
    BaseC s1;
    //s1.m_A = 1000;//在此类中  变为私有成员 访问不到
    //s1.m_B = 1000;//
}
int main() {

    system("pause");
    return 0;

}

 

 

 

 

 

 

 

 

 

 

#include<iostream>
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;

};
//利用开发人员命令提示工具查看对象模型
//跳转盘符 F:
//跳转文件路径 cd 具体路径下
//查看命名
//cl /d1 reportSingleClassLayout 类名 文件名 
void test01() {
    //16
    //父类中所有非静态成员属性都会被子类继承下去
    //父类中私有成员属性  是被编译器给隐藏了 因此是访问不到 但是确实被继承下去了

    cout << "size of son =" << sizeof(son) << endl;

}
int main() {

    test01();
    system("pause");
    return 0;
}

结论:父类中的私有成员也是被子类继承下去了,只是由编译器给隐藏后访问不到

 

 

 

 

 

#include<iostream>
using namespace std;

class Person {
public:
    Person() {
        m_A = 200;
    }

    void func() 
    {
        cout << "Base-func()下函数调用" << endl;
    }
    void func(int a)
    {
        cout << "son-func(int a)下函数调用" << endl;
    }
    int m_A;
};

class son :public Person {
public:
    son() {
        m_A = 100;

    }

    void func()
    {
        cout << "son-func()下函数调用" << endl;
    }

    int m_A;
};

//同名成员属性
void test01() {
    son s;
    cout << " son 里的m_A" <<s.m_A<< endl;
    //通过子类对象,访问到父类同名成员,需要加作用域
    cout << "Person 里的m_A" << s.Person::m_A << endl;
}
//同名成员函数
void test02()
{
    son s;
    s.func();
    //如何调用到父类中的同名成员函数
    s.Person::func();
    //如果子类中出现了和父类同名的成员函数,子类的同名成员会隐藏掉父类中所有同名成员函数
    //如果想访问父类中被隐藏的同名成员函数,需要加作用域
    //s.func(100); //c错误模式
    s.Person::func(100);//成功
}
int main() {
    test02();

    system("pause");
    return 0;
}

 

 

 

#include<iostream>
using namespace std;
//继承中的同名静态成员处理方式

class Base {
public:
    static int m_A;//类内声明  类外初始化
    void func() {
        cout << "Base --静态函数关键字" << endl;
    
    }


};
 int Base::m_A=100;

 class Son :public Base {
 public:
     static int m_A;//类内声明  类外初始化 
     void func() {
         cout << "Son --静态函数关键字" << endl;

     }
 
 };
 int Son::m_A = 200;
//同名的静态成员属性
 void test01() {
     //通过对象来访问数据
     Son s;
     cout << "Son 下m_A =" << s.m_A << endl;
     cout << "Base 下m_A =" << s.Base::m_A << endl;
     
     //2 通过类名方式访问
     cout << "通过类名的方式访问" << endl;
     cout << "Son 下m_A" << Son::m_A << endl;
     cout << "Base 下m_A" << Base::m_A << endl;
     //子类对象访问父类中的m_A数据,并且通过类名的方式访问
     //第一个::代表通过类名的方式访问,  第二个::代表访问父类作用域下
     cout << "Son::Base 下m_A" << Son::Base::m_A << endl;

 
 }
 //同名静态成员函数
 void test01() {
    // //通过对象访问
    // cout << "通过对象访问" << endl;
    // Son s;
    // s.func();
    // s.Base::func();
    // //通过类名访问
    // cout << "通过类名的方式访问:" << endl;
    // //Son::func();
    //// Son::Base::func();
 }


 void test02() {
     //通过对象访问
     cout << "通过对象访问" << endl;
     Son s;
     s.func();
     s.Base::func();
     //通过类名访问
     cout << "通过类名的方式访问:" << endl;
     //子类出现和父类同名静态成员函数  也会隐藏父类中所有同名成员函数
     //如果想访问父类中被隐藏同名成员 需要加作用域
    // Son::func();
    //  Son::Base::func();
 
 
 }
int main() {
    //test01();
    test02();

    system("pause");
    return 0;
}

 

 

 

 

 

 

 

posted @ 2021-09-21 18:04  健丽  阅读(27)  评论(0编辑  收藏  举报