类里面重载运算符>>, 需要使用友元函数,而友元函数,不能作为虚函数。
所以,基类指针无法直接调用继承类里重构的 >> ;
使用类转换,能解决掉,基类指针 调用 继承类 函数的问题。
#include<iostream>
#include<math.h>
#include<string>
using namespace std;
class Person{
string a, b;
public:
virtual void show(){cout<<a<<" "<<b<<" ";}
friend istream &operator >>(istream&in, Person&d){in>>d.a>>d.b;cout<<;return in;};//输入两个数 }; class Gun: public Person{
double gu;
public:
friend istream &operator >>(istream&in,Gun&d){
in>>d.gu;cout<<;return in;}//输入一个数
void show(){Person::show();cout<<gu<<endl;}
}; int main(){
Person*g;
g=new Gun;
cin>>(*(Gun*)g); Person*gg;
gg=new Gun;
cin>>*gg;
}
继承类调用基类友元函数 如 >> 只能用显示转换
class Person{
public: string a, b;
friend istream &operator >>(istream&in, Person&d){in>>d.a>>d.b;return in;}
};
class Gun: public Person{
double gu;
public:
friend istream &operator >>(istream&in,Gun&d){ in>>(Person&)d;in>>d.gu;return in;}
};