引用可能是指C ++中struct的成员

时间:2014-05-18 16:18:17

标签: c++ pointers struct reference

我们可以创建一个包含一些值的结构和指向同一结构中的值的引用吗?我的想法是制作别名。所以我可以用不同的方式调用struct成员!

struct Size4
{    
    float x, y;
    float z, w;

    float &minX, &maxX, &minY, &maxY;

    Size4(float _x, float _y, float _z, float _w) : x(_x), y(_y), z(_z), w(_w),
        minX(x), maxY(y), minY(z), maxY(w)
    {
    }

};

谢谢大家。

注意:我是用指针做的,但现在当我试图调用Size4.minX()时,我得到的是地址,而不是值。

struct Size4
{    
    float x, y;
    float z, w;

    float *minX, *maxX, *minY, *maxY;

    Size4(float _x, float _y, float _z, float _w) : x(_x), y(_y), z(_z), w(_w),
        minX(&x), maxX(&y), minY(&y), maxY(&w)
    {
    }
};

2 个答案:

答案 0 :(得分:1)

"我想让它变得透明。尺寸4尺寸(5,5,5,5); size.minX;和size.x;返回相同的值..."

你可以这样做。不过,我建议您使用class

using namespace std;
struct Size4
{
    float x, y;
    float z, w;

    float *minX, *maxX, *minY, *maxY;

    Size4(float _x, float _y, float _z, float _w) : x(_x), y(_y), z(_z), w(_w),
        minX(&x), maxX(&y), minY(&y), maxY(&w)
    {
    }
};

int main() {
  Size4 s(1,2,3,4);
  std::cout << *(s.minX) << std::endl;
  return 0;
}

或者您可以在struct

中添加此方法
float getX() {
  return *minX;
}

并像这样访问:

std::cout << s.getX() << std::endl;

但是,class会提供更好的封闭空间。私有数据成员和get-er函数访问minX

[编辑]

使用class很简单:

#include <iostream>

using namespace std;
class Size4
{
 private:
  // these are the private data members of the class
    float x, y;
    float z, w;

    float *minX, *maxX, *minY, *maxY;

 public:
  // these are the public methods of the class
    Size4(float _x, float _y, float _z, float _w) : x(_x), y(_y), z(_z), w(_w),
        minX(&x), maxX(&y), minY(&y), maxY(&w)
    {
    }

    float getX() {
      return *minX;
    }
};

int main() {
  Size4 s(1,2,3,4);
  std::cout << s.getX() << std::endl;
  // std::cout << *(s.minX) << std::endl; <-- error: ‘float* Size4::minX’ is private
  return 0;
}

答案 1 :(得分:0)

使用解除引用运算符取代您的值:*(size4.minx)

一个小例子:

Size4 sz(11, 2, 3, 4);
printf("%f, %f, %f, %f", *sz.minX, *sz.maxX, *sz.minY, *sz.maxY);