c++基类指针指向继承类调用继承类函数
类里面重载运算符>>, 需要使用友元函数,而友元函数,不能作为虚函数。
所以,基类指针无法直接调用继承类里重构的 >> ;
使用类转换,能解决掉,基类指针 调用 继承类 函数的问题。
#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<<555;return in;};//输入两个数 }; class Gun: public Person{ double gu; public: friend istream &operator >>(istream&in,Gun&d){ in>>d.gu;cout<<111;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;}
};