子类可以直接调用父类的函数吗?
比如
class A
{
csdnA();
};
class B: public A
{
}
然后可以直接 B 2B; 2B.csdnA(); 吗?
[解决办法]
csdnA();是私有的,不可直接调用
[解决办法]
对,子类可以调用基类所有的public和protected权限的函数。
[解决办法]
public的话是可以的。
其实不用问。自己写个程序去运行一下就知道了。
[解决办法]
[解决办法]
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();}