c++笔试题(继承问题,对象生成问题)-6-10
看看此程序运行结果:
#include<iostream>
using namespace std;
class A{
public:
void virtual f()
{
cout<<"A"<<endl;
}
};
class B:public A{
public:
void virtual f()
{
cout<<"B"<<endl;
}
};
int main()
{
A* pa=new A();
pa->f();
B* pb=(B *)pa;
pb->f();
delete pa,pb;
pa=new B();
pa->f();
pb=(B *)pa;
pb->f();
return 0;
}
运行结果:
A
A
B
B
通过结果看问题,
1.在A* pa=new A();中创建了一个A对象,之后将pa和pb指针指向这个对象,但是这始终是A对象,而pa,和pb只是指针,所以调用的都是A对象中的f()函数。
2.典型的多态问题。
存在一个疑惑:就创建了一个对象,delete pa,pb;怎么没有错
这里说一下public,protected和private继承的问题
1.public 继承
基类中的成员访问权限在子类中不变,子类生成的对象访问基类的成员权限不变
2.protected继承
基类中的public和protected成员在子类中变为protected
3.private
基类中的所有成员都在子类中变为private
注意:
在子类中的成员内部访问基类的成员权限是没有变的。
例子
#include<iostream>
using namespace std;
class A{
public:
void fA()
{
cout<<"fA()"<<endl;
}
};
class B:private A{
public:
void fB()
{
fA();
}
};
int main()
{
B b;
b.fB(); //正确:打印fA()
b.fA();//错误“A::fA”不可访问,因为“B”使用“private”从“A”继承
return 0;
}