由于友元函数并非类成员,因此不能被继承,在某种需求下,可能希望子类的友元函数能够使用父类中的友元函数。为此可以通过强制类型转换,将子类的指针或是引用强转为父类的引用或是指针,然后使用转换后的引用或是指针来调用基类中的友元函数。
#include "stdafx.h"
#include <iostream>
using namespace std;
class Student
{
public:
Student(int a, int b) :_a(a), _b(b){}
friend ostream &operator<<(ostream & out, Student & stu);
private:
int _a;
int _b;
};
ostream &operator<<(ostream & out, Student & stu)
{
out << stu._a << "--" << stu._b << endl;
return out;
}
class Graduate :public Student
{
public:
Graduate(int a, int b, int c) :Student(a, b), _c(c){}
friend ostream &operator<<(ostream & out, Graduate & gra);
private:
int _c;
};
ostream &operator<<(ostream & out, Graduate & gra)
{
cout << static_cast<Student&>(gra);
//友元函数不能被继承,需要转化为父类类型,然后调用其中的友元函数
//如果不强制转化的话 参数匹配的函数还是它自己产生递归 系统崩溃
cout <<"--"<< gra._c;
return out;
}
int _tmain(int argc, _TCHAR* argv[])
{
Student s(1,2);
cout << s ;
Graduate g(3, 4, 5);
//没有自己的<<重载函数时 赋值兼容 g赋值给了Student & st
//赋给了父类的类型 所以才能访问父类的私有成员
cout << g ;
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)