Как вызвать переменную класса с разными именами?

Как вызвать переменную класса с разными именами?

Я имею в виду аналогично что-то вроде этого:

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;
}

Я хочу сделать что-то подобное, но без глобальной замены слов влево и вправо.

Есть ли способ сделать это?

-1

Решение

Вы можете использовать злые макросы:

#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;
0

Другие решения

Вы можете использовать ссылки:

struct test {
int values[2];
int& right = values[0];
int& left = values[1];
};

Обратите внимание, что они являются действительными членами класса, поэтому они принимают неопределенный размер. На практике это не имеет большого значения, так как две ссылки вряд ли велики.

4

Вы можете просто использовать встроенные методы, которые делают нечто подобное:

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]; }
};

или используйте ссылки:

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 &, Кроме того, эти дополнительные ссылки увеличивают размер класса.

4

Попробуйте использовать указатели в классе с именами ‘left’ и ‘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;
}
0
По вопросам рекламы [email protected]