【问题标题】:Can a superclass function access a subclass data-member超类函数可以访问子类数据成员吗
【发布时间】:2016-03-08 11:10:18
【问题描述】:

我知道通常它不能,但我想知道是否有任何代码允许我在超类中的函数访问子类的成员。有四个子类,每个子类都有一个 int 大小变量,对于函数,我需要 size 变量。我和一位老师谈过以某种方式使用朋友代码,但她说那行不通。

【问题讨论】:

  • 为什么成员不在超类中?
  • 因为成员的值会根据它所在的子类而变化

标签: c++ subclass superclass


【解决方案1】:

您可以在返回大小的基类中创建一个纯虚函数。然后您可以在派生类中实现该函数,该函数将返回存储在派生类中的大小。

【讨论】:

    【解决方案2】:

    这就是虚成员函数的用途:

    struct Base {
        virtual std::string child_name() = 0; 
    };
    
    struct Derived1 {
        virtual std::string child_name { return "Derived1"; }
    };
    
    struct Derived2 {
        virtual std::string child_name { return "Derived2"; }
    };
    

    请注意,如果您在基类中指定 = 0,您的基类将变为“纯虚拟”且不可实例化,因此如果您不希望这种行为,则必须定义一个默认实现,如果派生类没有定义虚函数,也会使用它。

    重要提示:不应在构造函数中调用虚函数,否则您将收到异常(如果函数是纯虚函数)或不良行为(将调用默认实现)。

    【讨论】:

      猜你喜欢
      • 2014-05-30
      • 2012-10-08
      • 2011-08-04
      • 2012-09-11
      • 2013-05-03
      • 2018-10-14
      • 2021-06-28
      • 1970-01-01
      • 2022-01-10
      相关资源
      最近更新 更多