请教public继承时,派生类中的函数的访问权限,由谁决定的问题?
比如下面示例,基类中有一个fn(),是public的,派生类是public继承的。
但是派生类中的fn(),好象其访问权限还是取决于函数定义上面那一行的 public:
我想问一下:这两个地方的public,谁起作用呢?
#include <iostream.h> class base; base * pbase; class base 

public: 
  base() 
  { 
  pbase=this; 
          
  } 
  virtual void fn() 
  { 
  cout << "base" << endl; 
  } 
}; class derived:public base  //fn()的访问权限是这个地方决定的??????

//public:          //fn()的访问权限是这个地方决定的??????
void fn() 

  cout <<"derived" <<endl; 

}; 
derived aa;  //全局变量 void main() 

derived my1; 
//base* p1;
//p1=&my1;
//p1->fn();
my1.fn(); //如果注释了fn()上面那行的 public: ,则此句会报错
}

解决方案 »

  1.   

    您还没有正面回答我的问题,
    派生类中的fn(),其访问权限是由哪个public决定的,
    两个public,上面的是指明继承方式,是public继承的。按照继承的理论,基类中是public,以public继承后也应该是public呀,为何还是底下的那个public决定呢?
    下面的public,是指明函数是public的。
      

  2.   

    建议楼主重新看看书吧,你把虚函数override 覆盖了,你应该做的是重载他,而不是覆盖他,到时候编译器不知道调用哪个,不报错才怪呢。
      

  3.   

    在C++中,为了灵活,函数的覆盖与这个可见修饰没有关系,你可以在基类中定义一个虚的private
    函数,并在派生类中重新实现成public(一般不会这么用,但它的语法支持)。
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~网上搜到的。也就是说派生类中的fn()参与覆盖了。那么它的访问权限如果在public继承情况下应该由下面的public来决定的。
    protected,private继承很少见的。我都没注意过
      

  4.   

    你要是不理解他的解释,就先把derived类中的fn函数换一个名