【问题标题】:C++ : How do I call private methods through public ones?C++:如何通过公共方法调用私有方法?
【发布时间】:2015-04-14 23:57:12
【问题描述】:

对于我们的项目,我们获得了一个代码 sn-p,我们不应以任何方式对其进行编辑。我们只允许在上述 sn-p 中为原型编写函数定义。

我的问题和疑问是关于当以这种方式编写代码时我应该如何调用私有函数:

class ClassOne {
    private:
    void methodOne();

    public:
    void methodTwo();
};

所以我应该能够通过methodTwo访问methodOne,但无需在methodOne旁边写{ methodTwo();}。请帮帮我?

【问题讨论】:

  • 如果您希望一种方法调用另一种方法,就这样做。或者是关于如何定义类之外的方法的问题?

标签: c++ function class


【解决方案1】:

类定义声明了成员函数methodOnemethodTwo,但没有定义它们。您需要在类外定义它们。

// I assume the return type is void since you omitted it, but
// keep in mind the compiler will not allow you to omit it!
void ClassOne::methodOne() {
    // ...
}
void ClassOne::methodTwo() {
    // ...
    methodOne(); // OK since access is from a member of ClassOne
    // ...
}

【讨论】:

    【解决方案2】:

    你已经有你的class:

    class ClassOne {
        private:
        void methodOne();
    
        public:
        void methodTwo();
    };
    

    实现classfunctions

    void ClassOne::methodOne() { // <-- private
       // other code
    }
    
    void ClassOne::methodTwo() { // <-- public
       // other code
       methodOne();              // <-- private function called here
    }
    

    【讨论】:

    • 你好。我有一个后续问题。由于类方法是用格式 returnType className::funcName() 定义的,当我编写定义以便从公共函数中调用私有函数时,是否应该省略“className::”?还是我应该保留它?提前谢谢你:)
    • @DonAbril 您还没有为这个问题选择过答案。一次一个问题。
    • @DonAbril 您的类中的方法,当定义时,格式为:returnType className::functionName(parameters)。当我们在课堂上为它们编写原型时,您只需将它们保留为以下格式:returnType functionName(parameters)
    【解决方案3】:

    私有函数只对对象之外的东西是私有的。 你可以像其他函数一样在 m2 中正常调用 m1。

    【讨论】:

      【解决方案4】:

      要从methodTwo 调用methodOne,只需将method2 定义为:

      void ClassOne::methodTwo() {
          methodOne();
      }
      

      【讨论】:

      • 您忘记了返回类型。
      • @MooingDuck 我省略了它,因为 OP 做了。但我可能还是应该放一个,呵呵。
      【解决方案5】:

      所有私有函数和变量都可以从公共函数中访问。因此,您可以按如下方式调用您的私有函数:

      void ClassOne::methodTwo(){
         methodOne();
      }
      

      【讨论】:

        猜你喜欢
        • 2011-09-19
        • 2014-08-06
        • 2013-01-23
        • 1970-01-01
        • 2011-12-06
        • 1970-01-01
        • 1970-01-01
        • 2015-09-13
        • 1970-01-01
        相关资源
        最近更新 更多