zoukankan      html  css  js  c++  java
  • <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 }
  • 相关阅读:
    day13_迭代器,生成器
    作业礼包
    day12_装饰器进阶
    装饰器作业
    day11_装饰器
    函数作业
    day10-函数进阶
    数据类型-习题解答
    day09_函数
    PHP 完美分页
  • 原文地址:https://www.cnblogs.com/foundkey/p/6074250.html
Copyright © 2011-2022 走看看