zoukankan      html  css  js  c++  java
  • private, public, protected,继承【转】

    View Code
    第一:private, public, protected 访问标号的访问范围。
    1.    private:  只能由1.该类中的函数、2.其友元函数访问。                   该类的对象也不能访问。
    2.    protected:可以被1.该类中的函数、2.子类的函数、3.其友元函数访问。     该类的对象也不能访问。
    3.    public:   可以被1.该类中的函数、2.子类的函数、3.其友元函数访问。     该类的对象可以访问。
    注:友元函数包括3种:设为友元的普通的非成员函数;设为友元的其他类的成员函数;设为友元类中的所有成员函数。
    
    第二:类的继承后方法属性变化。
    1.private 属性不能够被继承。
    2.使用private继承,父类的protected和public属性在子类中变为private;
      使用protected继承,父类的protected和public属性在子类中变为protected;
      使用public继承,父类中的protected和public属性不发生改变; 
      如下:
      成员属性:            基public:         基protected:       基private:
      public继承          派public          派protected        派不可用 
      protected继承       派protected       派protected        派不可用 
      private继承         派private         派private          派不可用 
    3.    protected继承和private继承能降低访问权限。
    
    
    第三:public、protected和private继承
    在C++中继承主要有三种关系:public、protected和private。这三种继承关系中public继承是最为常用的一种继承关系,private继承是最少见的继承关系。
    1. public
    public继承是一种接口继承,根据面向对象中的关系而言就是,派生类可以代替基类完成基类接口所声明的行为.
    从语法角度上来说,public继承会保留基类中成员(包括函数和变量等)的可见性不变,也就是说,基类的public成员为派生类的public成员,基类的protected成员为派生类的protected成员。
    
    2. protected
    从语义角度上来说,protected继承是一种实现继承。
    从语法角度上来说,protected继承会将基类中的public可见性的成员修改成为protected可见性,相当于在派生类中引入了protected成员,这样一来在派生类中同样还是可以调用基类的protected和public成员,派生类的派生类就也可以调用被protected继承的基类的protected和public成员。
    例如:
    class CSample1 
    {
    protected:
        void printProtected()
        {}
    public:
        void printPublic() 
        {}
    };
    class CSample2 : protected CSample1 
    {
    };
    class CSample3 : public CSample2 
    {
        void print3() 
        {
            printProtected();
            printPublic();
        }
    };
    
    
    3. private
    从语义角度上来说,private继承是一种实现继承,private继承会将基类中的public和protected可见性的成员修改成为private可见性,这样一来虽然派生类中同样还是可以调用基类的protected和public成员,但是在派生类的派生类就不可以再调用被private继承的基类的成员了。
    class CSample1 
    {
    protected:
        void printProtected() 
        {}
    public:
        void printPublic()
        {}
    };
    class CSample2 : private CSample1 
    {};
    class CSample3 : public CSample2 
    {
        void print3() 
        {
            printProtected(); // 编译错误,不可以调用该函数
            printPublic();    // 编译错误,不可以调用该函数
        }
    };
  • 相关阅读:
    jquery_DOM笔记3
    jquery_DOM笔记2
    mac之jdk环境变量配置
    360导致的mysql问题解决
    windows服务器apache配置https教程
    生成自己openssl的证书
    wkhtmltopdf中文乱码
    安装ruby、rails
    extjs中返回数据时id不能重复,否则数据会被合并
    gzip压缩ext-all.js
  • 原文地址:https://www.cnblogs.com/guyan/p/2444984.html
Copyright © 2011-2022 走看看