【C++】常见的多态面试题

目录

多态的概念及其构成条件

重载、重写、重定义 

纯虚函数 


多态的概念及其构成条件

多态概念:对不同的对象会有不同的实现方法,即为多种形态。

构成条件:

  1. 派生类要进行虚函数的重写(父子类虚函数需要三同,三同指函数名、参数、返回值)
  2. 要用父类的指针或引用去调用虚函数

三同有种列外:协变(基类与派生类的虚函数返回值不同)

 其他注意事项:

  1. 析构函数的重写(看似不符合函数名相同的条件,实际上编译器对其进行了特殊处理,编译后析构函数的名字统一处理成destructor)
  2. 派生类虚函数重写可以不加virtual(但建议写上)

重载、重写、重定义 

注意:重写是指重写函数体。

如下图,有这么一道题:b通过虚函数表调用了继承的test(),test()又通过虚函数表找到自己的(重写的)func()结果打印出来的结果却是B:1,其使用的缺省值是A类中的func()的缺省值,所以实际上b调用func函数时使用的是自己的函数体,声明却是使用原声明。 

class A
{
public:
	virtual void func(int val = 1)
	{
		cout << "A:" << val << endl;
	}
	virtual void test()
	{
		func();
	}
private:
	int a;
};


class B: public A
{
public:
	//virtual void func(int val = 0)
	void func(int val = 0)
	{
		cout << "B:" << val << endl;
	}
private:
	int b;
};

int main()
{
	B* b = new B;
	b->test();
	return 0;
}

纯虚函数 

纯虚函数就是在虚函数的声明后加上  =0  ,有纯虚函数的类被称作抽象类,抽象类不能实例化对象。如果继承的派生类不重写纯虚函数,那么这个派生类也是抽象类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值