首页 > 用户发贴区 > 编程问题提问区 > [求助]关于类的私有继承与派生
2008
09-03

[求助]关于类的私有继承与派生

 







例:
class point
{public:
           void initP(float xx=0,float yy=0){X=xx;Y=yy;}
           void Move(float xOFF,float yOFF){X+=xOFF;Y+=yOFF;}
  private:
           float X,Y;
};


 


class Rectangle:private point


{    void initR(float x,float y,float w,float h){initP(x,y);W=w;H=h;}


     //为什么可以直接访问基类的公有函数initP
      void Move(float xOFF,float yOFF){point::Move(xOFF,yOFF)}
     //为什么这里不可以访问基类的公有函数Move
     //initp与move多是基类的公有函数,以private继承派生,应当initp也要进行Point::initP才可以啊
     //可书上说initp是派生类访问基类公有成员可以直接访问。


}


[求助]关于类的私有继承与派生》有 4 条评论

  1. xstar 说:

    非常基础的概念问题
    第一:private, public, protected 访问标号的访问范围。
    private:只能由1.该类中的函数、2.其友元函数访问。
    不能被任何其他访问,该类的对象也不能访问。

    protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问。
    但不能被该类的对象访问。

    public:可以被1.该类中的函数、2.子类的函数、3.其友元函数访问,也可以由4.该类的对象访问。

    注:友元函数包括3种:设为友元的普通的非成员函数;设为友元的其他类的成员函数;设为友元类中的所有成员函数。

    第二:类的继承后方法属性变化。
    private 属性不能够被继承。
    使用private继承,父类的protected和public属性在子类中变为private;
    使用protected继承,父类的protected和public属性在子类中变为protected;
    使用public继承,父类中的protected和public属性不发生改变;

    如下所示:
                          public:        protected:   private:
    public继承        public         protected    不可用
    protected继承  protected   protected    不可用
    private继承       private       private         不可用

    protected继承和private继承能降低访问权限。

  2. xstar 说:

    C/C++语言以分号为一行语句的结束符号!!!

  3. wlxjb 说:

    void Move(float xOFF,float yOFF){point::Move(xOFF,yOFF)}

    是不是派生类中定义公有函数名相同的原因,两个函数名多是Move,所以要进行类的指名

  4. xstar 说:

    [QUOTE=wlxjb]

    void Move(float xOFF,float yOFF){point::Move(xOFF,yOFF)}

    是不是派生类中定义公有函数名相同的原因,两个函数名多是Move,所以要进行类的指名

    [/QUOTE]

    是的!
    明确指定是调用哪个函数!

    引申一下!多重继承(两个基类以上,并基类中有同样名字的成员)和命名空间namespace等概念里面也有这种限定对象的访问方式!

留下一个回复