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



全部评论

相关推荐

牛客539033066号:放心吧,这里面一大半都不会去面试的,剩下一半面过了最后还是回拒,实际上免笔试的那些bg的人,没多少愿意去这些岗位,薪资水平在那里
点赞 评论 收藏
分享
11-21 13:04
已编辑
门头沟学院 算法工程师
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务