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指针吗