c++笔试题(继承问题,对象生成问题)-6-10

来源:互联网 发布:淘宝网集市商家热线 编辑:程序博客网 时间:2024/05/15 23:45

看看此程序运行结果:

#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;}