注册 登录
编程论坛 C++教室

我用的是public继承,但是为何子类的函数不是public的呢?

ggyy66 发布于 2009-10-09 13:56, 1061 次点击
我用的是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
{
 void fn()
 {
  cout<<"derived"<<endl;
 }
};


derived aa;  //全局变量

void main()
{
 derived my1;
 my1.fn();
}

6 回复
#2
ggyy662009-10-09 13:57
fn()在基类中是public函数,但是为何到了子类中,就没有public访问权限了呢?
#3
flyingcloude2009-10-09 14:41
因为你在子类中已经把fn()定义成私有的拉
#4
ggyy662009-10-09 15:05
以下是引用flyingcloude在2009-10-9 14:41:55的发言:

因为你在子类中已经把fn()定义成私有的拉
但是我是public继承呀,
难道public继承在这里不起作用吗?
访问权限只依据
类中的:
public:
private:
protected:
吗:
class b :public a
后面的 public a 不起作用吗?

#5
flyingcloude2009-10-09 17:00
回复 4楼 ggyy66
这个public是针对父类的成员函数被子类继承后所具有的访问权限
#6
Chost2009-10-09 20:31
首先说明void fn()是虚函数,而在类derived中您没有说明此函数的访问权限,所以默认它的访问权限为private。
在main()函数中,通过类derived的对象my1调用fn()函数,采用的是静态联编,即它调用的是类derived类中的
fn()函数,而不是调用继承来的fn()函数,所以执行时显示不能访问私有成员函数。
#7
ggyy662009-10-10 08:36
明白了,我如果在子类中不进行覆盖,是可以调用的,但是我在子类中重写这个函数,其访问权限应该取决于子类的限定。
1