<C++>友元与虚函数的组合

为类重载<<与>>这两个运算符时,重载函数必须为该类的友元函数。
当友元不能被继承,故不能当作虚函数,无法使用多态。
可以用以下结构实现友元与虚函数的组合。
 1 class base {
 2 public:
 3     friend ostream & operator << (ostream &o, const base &b);
 4 private:
 5     virtual ostream & print(ostream & o) const {
 6         return o << "Hello, Base";
 7     }
 8 };
 9 
10 class derived : public base {
11 public:
12 private:
13     virtual ostream & print(ostream & o) const override {
14         return o << "Hello, Derived";
15     }
16 };
17 
18 ostream & operator << (ostream &o, const base &b)
19 {
20     return b.print(o);
21 }
22 
23 int main()
24 {
25     base base_obj;
26     derived derived_obj;
27     vector<base *> v = {&base_obj, &derived_obj};
28     for(auto i: v) {
29         cout << *i << endl;
30     }
31     return 0;
32 }

 

转载于:https://www.cnblogs.com/foundkey/p/6074250.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值