C++ 如何用不同的名称调用类变量?

C++ 如何用不同的名称调用类变量?,c++,class,substitution,C++,Class,Substitution,如何用不同的名称调用类变量 我的意思与此类似: class test{ int values[2]; #define right values[0] // <- something like this #define left values[1] }; int main(){ test obj; obj.values[1] = 23; // this is the same thing obj.left = 23; // <-' int lef

如何用不同的名称调用类变量

我的意思与此类似:

class test{
  int values[2];
  #define right values[0] // <- something like this
  #define left values[1]
};

int main(){
  test obj;
  obj.values[1] = 23; // this is the same thing
  obj.left = 23;      // <-'
  int left = 10;      // error, because this is equal to int values[1]=10;
}
类测试{
int值[2];

#定义正确的值[0]/您可以使用引用:

struct test {
    int values[2];
    int& right = values[0];
    int& left = values[1];
};
class test{
  int values[2];
  int & right = values[0]; // initialization syntax with C++11 or later. For pre-
  int & left = values[1];  // C++11, these must be initialized in the constructor
};

请注意,它们是类的实际成员,因此大小未指定。但实际上这并不重要,因为两个引用几乎都不大。

您可以使用内联方法来执行类似的操作:

class test{
  int values[2];
  int & right() { return values[0]; }
  int const & right() const { return values[0]; }
  int & left() { return values[1]; }
  int const & left() const { return values[1]; }
};
或使用参考资料:

struct test {
    int values[2];
    int& right = values[0];
    int& left = values[1];
};
class test{
  int values[2];
  int & right = values[0]; // initialization syntax with C++11 or later. For pre-
  int & left = values[1];  // C++11, these must be initialized in the constructor
};

然而,对于引用,给定一个
const test obj
obj.right
obj.left
仍然引用非
const
整数,即具有类型
int&
,而不是
const int&
。此外,这些额外的引用增加了类的大小。

尝试在名为“left”的类中使用指针d“right”指向值[0]和[1],如

#include <iostream>

using namespace std;

int main() {
int arr[2];
arr[0]=20;
arr[1]=30;
int *x=&arr[0];
int *y=&arr[1];


  cout<<"x is " << *x;
}
#包括
使用名称空间std;
int main(){
int-arr[2];
arr[0]=20;
arr[1]=30;
int*x=&arr[0];
int*y=&arr[1];

cout您可以使用邪恶的宏:

#define right values[0]
#define left  values[1]
另一个想法是使用命名常量:

const size_t right = 0;
const size_t left  = 1;
/...
int r = values[right];
int l = values[left];
尽管如此,IMHO,更好的习惯用法是使用两个单独的变量而不是数组:

int right;
int left;
您还可以使用指针:

int * left = &values[1];
int * right = &value[0];
//...
*left = 0;

请展示真实的代码。示例中的错误只是分散了您对实际问题的注意力。
int&left(){returnvalues[0];}
?当您实际想要不同地访问这两个值时,为什么要将这两个值放在c数组中?@user463035818您可以简单地将它们交换为值,而无需更改外部指针/引用。我不认为这是重点……值得指出的是,这会更改类的大小;而不仅仅是重命名variables.@UKMonkey谢谢!添加:)这很有效,但会不必要地向类添加2个指针。您知道有什么方法可以做到这一点,但不需要在类上使用rwoextra指针吗