zoukankan      html  css  js  c++  java
  • 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;
    }

     

     

     

  • 相关阅读:
    Android拷贝工程不覆盖原工程的配置方法
    Android中BindService方式使用的理解
    getApplicationContext()、Activity.this、 getBaseContext区别
    深入理解ASP.NET MVC(4)
    深入理解ASP.NET MVC(1)
    深入理解ASP.NET MVC(2)
    深入理解ASP.NET MVC(目录)
    C# 代码优化
    NPOI 创建Excel 设置宽度 样式 颜色对比表
    2. Mysql数据库的入门知识
  • 原文地址:https://www.cnblogs.com/gjianli/p/15316340.html
Copyright © 2011-2022 走看看