老郭  
Windows
日历
<2010年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456
统计
  • 随笔 - 0
  • 文章 - 2
  • 评论 - 8
  • 引用 - 0

导航

常用链接

留言簿

文章档案

搜索

  •  

最新评论

 
c++的三种继承方式:
public,private,protected.
(1)先从一个类说起:
   class A{
   private:
     int i;
   public:
     void f(){
       cout<<i<<endl;//这是可以的,类内部的函数可以访问它的私有成员。
     }
   private:
     void g(){
       cout<<i<<endl;//这也是可以的,类内部的函数可以访问它的私有成员,包括public,private,protected;
     }
    
   };
   void main(){
    A a;
    //a.i;
    //这是错误的,这个函数没有权限访问私有变量。
   }
(2)
   class A{
   private:
     int i;
   };
   void main(){
    A a;
    //a.i;
    //这是错误的,这个函数没有权限访问私有变量。
   }
(3)
   class A{
   private:
     int i;
   friend void main();//声明main函数是这个类A的友员函数。
   };
   void main(){
    A a;
    a.i;
    //这是正确的,友元函数有权限访问类的私有成员变量。
   }
(4)关于类的protected 成员变量。
  class A{
   protected:
    int x;
  };
  class B:public A{
   public:
    void f1(){
     cout<<x<<endl;
    }
   private:
    void f2(){
     cout<<x<<endl;
    }
    protected:
    void f3(){
     cout<<x<<endl;
    }
   }
   //总结:类B是从类A(public)继承而来,
   //类B的成员函数(包括 public,protected,private)都可以访问类A的私有成员变量。
   //其实类B可以从类A(protected,private)继承,结果都一样,它的成员函数都可以访问类A的私有变量。
   //!注意:是成员函数可以。
(5)接上面(4)
   class A{
   protected:
    int x;
   };
  class B:public A{
   public:
    void f1(){
     cout<<x<<endl;//可以
    }
   private:
    void f2(){
     cout<<x<<endl;//可以
    }
    protected:
    void f3(){
     cout<<x<<endl;//可以
    }
   }
   void main(){
    B b;
    b.x=1;//不可以,结合上面(4)所说,是子类的成员函数可以,但是不能通过对象直接访问。
   }
(6)关于单个类的protected成员变量。
   它在类内部访问属性和私有成员一样。
   class A{
    private:
     int x;
    protected:
     int y;
    public:
     void f1(){
      cout<<x<<y<<endl;//和私有成员变量一样,可以访问。
     }
   }
   void main(){
     A a;
     cout<<a.x<<a.y<<endl;//和私有成员变量一样,不可以这样访问。
   }
(7)假设B类继承A类,即B类是A类的直接子类。
   public继承:A的访问属性在B类保持不变。
               A的public----------B仍是public;       
               A的protected-------B仍是protected;
               A的private---------B仍是private;
   protected继承:
               A的public----------B变成protected;     
               A的protected-------B仍是protected;
              
               A的private---------B仍是private;
   private继承:
               A的public----------B变成private;     
               A的protected-------B变成private;
              
               A的private---------B仍是private;
   //这里说的都是直接子类。
   //结合(7)和以上几点 各类的访问权限,尤其是(protected修饰的)就可以明白
   //C++继承下各个类之间的访问权限。
(8)备注:以上只设计单继承。多继承未作研究。
posted on 2008-07-05 23:05 老郭 阅读(1609) 评论(8)  编辑 收藏 引用
评论:
  • # re: c++的三种继承方式  老郭 Posted @ 2008-07-05 23:08
    深入浅出MFC中  回复  更多评论   

  • # re: c++的三种继承方式  李刚 Posted @ 2009-08-05 15:24
    你到底懂不懂?  回复  更多评论   

  • # re: c++的三种继承方式   Posted @ 2009-08-05 18:24

    @李刚
    我也是一步步探索摸索过来的。应该没错吧。  回复  更多评论   

  • # re: c++的三种继承方式  SS Posted @ 2010-01-19 17:30
    误人子弟,你可以回家种田了  回复  更多评论   

  • # re: c++的三种继承方式  laoguo Posted @ 2010-01-28 13:16
    @SS
    别这么说呀 老兄。 我也是刚刚学习。写写而已  回复  更多评论   

  • # re: c++的三种继承方式[未登录]  rainfish Posted @ 2010-08-28 15:39
    哥们儿,写文章要确实知道再写,否则误人子弟啊!父类的私有变量,子类是看不到的!  回复  更多评论   

  • # re: c++的三种继承方式[未登录]  rainfish Posted @ 2010-08-28 15:47
    应该经过验证后再写文章,不要想当然,这样害人又害己啊。。。  回复  更多评论   

  • # re: c++的三种继承方式  证词阿姨 Posted @ 2010-10-05 20:10
    //类B的成员函数(包括 public,protected,private)都可以访问类A的私有成员变量。 错的,子类不能访问父类的私有成员  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


 
Copyright © 老郭 Powered by: 博客园 模板提供:沪江博客