子类可以直接调用父类的函数吗?解决方法
子类可以直接调用父类的函数吗?
比如
class A
{
****A();
};
class B: public A
{
}
然后可以直接 B 2B; 2B.****A(); 吗?
------解决方案--------------------
****A();是私有的,不可直接调用
------解决方案--------------------
对,子类可以调用基类所有的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]
------解决方案--------------------
比如
class A
{
****A();
};
class B: public A
{
}
然后可以直接 B 2B; 2B.****A(); 吗?
------解决方案--------------------
****A();是私有的,不可直接调用
------解决方案--------------------
对,子类可以调用基类所有的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 { ****A(); }; class B: public A { } B ZB; ZB.****A();
------解决方案--------------------
注意一下,子类不一定可以调用父类的函数,比如如下的代码就是不行的:
- 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(); }