首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

子类可以直接调用父类的函数吗?解决方法

2012-07-02 
子类可以直接调用父类的函数吗?比如class A{csdnA()}class B: public A{}然后可以直接 B 2B2B.csdnA()

子类可以直接调用父类的函数吗?
比如 

class A
{
  csdnA();
};

class B: public A
{

}

然后可以直接 B 2B; 2B.csdnA(); 吗?

[解决办法]
csdnA();是私有的,不可直接调用
[解决办法]
对,子类可以调用基类所有的public和protected权限的函数。
[解决办法]
public的话是可以的。

其实不用问。自己写个程序去运行一下就知道了。
[解决办法]

探讨

不好意思, 我写错了:


class A
{
public:
csdnA();
};

class B: public A
{

}

这样可以了吧

[解决办法]
lz这是要干嘛
[解决办法]
其实在MFC中经常会有子类调用父类函数的情况。包括被覆盖的和被隐藏的。
[解决办法]
子类能不能调用父类的函数与继承方式有关,C++有三种继承方式:
1.公用继承(public):对于基类成员在派生类中保持自己原来的的访问级别,原来是public(private/ protected),在派生类中也还是public(private/protected)。
2.受保护继承(protected):基类中的public成员和protected成员在派生类中为protected,private成员类型不变。
3.私有继承(private):积累的所有成员在派生类中都是private的。

类中的成员有三种访问类型:
1.public成员在调用类的函数里可以使用。
2.private成员只能在类的组成部分内使用,如类的定义体,类的成员函数的定义体里。
2.protected成员可以看做是前两者的混合:他像private成员一样不能被类的用户访问,像public成员一样可被该类的派生类访问。
[解决办法]
公有就可以了,如果不可以,继承还有意义吗?
[解决办法]
不可以,标识符不能以数字开头的
所以2B是不合法的
[解决办法]
有权限就可以,不过要以父类名加双冒号调用比如
[code=c/c++]
class A
{
  public:
  void show()
  {
    std::cout < <"I am class A" <std::endl;
    }
}
class B:public A
{
  public:
  void dosomething()
  {
      A::show();
  }
}
[/code]
[解决办法]
C/C++ code
class A{  csdnA();};class B: public A{}B ZB; ZB.csdnA();
[解决办法]
注意一下,子类不一定可以调用父类的函数,比如如下的代码就是不行的:
C/C++ code
#include <iostream>using std::cout;using std::endl;class   CStrange{public:    void    Stricky(){        cout<<"CStrange!"<<endl;    }};class   CDerived:public CStrange{public:    void    Stricky(int iValue){        cout<<"CDerived!"<<endl;    }};int main(){    CDerived    object;    object.Stricky();} 

热点排行