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: 今天在这被面试官问迷糊了。