【问题标题】:how to return multiple values from get function in c++ [duplicate]如何从c ++中的get函数返回多个值[重复]
【发布时间】:2014-06-05 13:47:45
【问题描述】:

我基本上是在私有类中传递两个参数,我试图在我的主函数中访问这两个参数。由于我将这两个参数设为私有,因此我使用 get 和 set 函数来访问这些参数,但我无法从 get 函数返回两个值。请帮我。上一篇文章问了同样的问题,但这次它被问到了面向对象的概念。

class FirstClass{
  public:
    void setName(int x,int y){
        a = x;
        b = y;
}
    int getName(){
    return a,b;

     }
  private:
    int a,b;
};

【问题讨论】:

  • 这种情况下需要使用两个函数来获取两个返回值。
  • 或者返回一个包含两个值的结构。或者通过引用传入变量并复制到这些变量中。
  • 注意:a,b 是逗号运算符,它的作用与 Python 不同。
  • @chris: ...并且请不要重载逗号运算符来执行与 Python 中类似的操作:D
  • @tgmath,为时已晚:someContainer = 1,3,5,4,7; 无论如何,对于这样的事情,它已经在某种语言中:auto foo() {return std::make_tuple(1, 3, "abc");} 至少这将在几个月内成为标准。

标签: c++ function class get return


【解决方案1】:

使用参考:

int getName(int &a1, int &b1) {
    a1 = a;
    b1 = b;
}

或者使用两个函数:

int getA() {
    return a;
}

int getB() {
    return b;
}

【讨论】:

  • 认为你的意思是引用。
  • 确实我做到了...修复了,谢谢。
【解决方案2】:

您可以返回单个值或将参数作为值结果参数(指针或引用)或返回带有参数的结构。毕竟你很可能只需要单独访问ab,所以为什么不只创建两个访问器

int getNameA(){
  return a;
}

int getNameB(){
  return b;
}

【讨论】:

    【解决方案3】:

    accessors/mutators 或 getter/setter 只用于获取/设置一个值。你的代码应该是这样的:

    class FirstClass{
      public:
      FirstClass(int x,int y){ //constructor, initialize the values
        a = x;
        b = y;
    }
      int getA(){
      return a;
     }
    
      int getB(){
      return b;
     }
    
      int setA(const int newVal){ //using const is a good practice
       a=newVal;
     }
    
      int setB(const int newVal){ //using const is a good practice
       b= newVal;
     }
    
     // you can use reference/pointer to *obtain* multiple values, although it is rarely used and seems inappropriate in your code
     void getBoth(int& aRef, int& bRef){
       aRef = a;
       bRef = b;
    }
    
    
      private:
      int a,b;
    };
    

    【讨论】:

    • 所以基本上我必须为教学参数创建单独的 get 和 set 函数??
    • @user3711379,是的。使用构造函数初始化所有值,使用 get/set 访问和重置单个值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2011-04-19
    • 2021-01-29
    • 2021-12-21
    相关资源
    最近更新 更多