多态、重载的面试题:多态情况下,子类又创建相同名称和返回值,参数不同的虚函数。还有子类创建相同名称和参数,返回值不同的虚函数。

1.多态情况下,子类在写一个相同名称与返回值,但参数不同的虚函数,此时是发生一个重载。不能通过父类指针和引用指向子类对象进行调用,只能通过具体的子类对象进行调用。

#include <iostream>
using namespace std;


class a{
public:
	int ma;
	a(int m1):ma(m1){}
	virtual void tt(int n){
		cout << n << " " <<ma<< endl;
	}
};

class b:public a{
public:
	int mb;
	b(int m1,int m2) :a(m1),mb(m2){}
	virtual void tt(int n1){
		cout << n1 << " " <<mb<< endl;
	}
	virtual void tt(int n1,int m2){
		cout << n1 << " " << m2 << endl;
	}
};

int main(){

	b b1(1, 2);
	a* a1 = &b1;
	a1->tt(3);     //3 2
    //通过下面两个调用可以发现是发生了重载
	b1.tt(4);      //4 2
	b1.tt(5, 6);   //5 6 

	system("pause");
	return 0;
}

2.多态情况下,子类在写一个相同名称与参数,但返回不同的虚函数,此时是会报错。因为返回值不能作为重载的条件。

class a{
public:
	int ma;
	a(int m1):ma(m1){}
	virtual void tt(int n){
		cout << n << " " <<ma<< endl;
	}
};

class b:public a{
public:
	int mb;
	b(int m1,int m2) :a(m1),mb(m2){}
	virtual void tt(int n1){
		cout << n1 << " " <<mb<< endl;
	}
	virtual void tt(int n1,int m2){
		cout << n1 << " " << m2 << endl;
	}
	virtual int tt(int n1){      //这个会编辑器报错,表示返回值类型不同不能作为重载条件
		cout << n1 << " " << m2 << endl;
	}
};

call:  今天在这被面试官问迷糊了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值