2014-05-18 69 views
2

我們能否創建一個包含一些值的結構和指向同一結構中的值的引用?我的想法是製作別名。所以我可以用不同的方式調用struct成員!引用可能指向struct的成員在C++中

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) 
    { 
    } 
}; 
+1

當然可以。然而,參考文獻不能重新分配,所以我沒有看到太多的用處。你想完成什麼,並且你瞭解了[指向成員](http://stackoverflow.com/questions/670734/c-pointer-to-class-data-member)? – StoryTeller

+0

感謝指向成員鏈接的指針,但通過添加解析地址操作符(*)可以訪問此解決方案。 – dsimonet

+0

我想讓它透明。 尺寸4尺寸(5,5,5,5); size.minX;和size.x;返回相同的值... – dsimonet

回答

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

也許這種方法對我來說是最好的方式......謝謝 – dsimonet

+0

你的例子沒有說明如何使用一個類,它只是在結構中重新使用OP自己的指針用例。 – StoryTeller

+0

我在附近提出了一個問題,前幾天:http://stackoverflow.com/questions/23678523/rename-member-by-inherit-class-in-c 我不能在結構中做同樣的事情? – dsimonet

0

使用對其操作把你的價值:*(size4.minx)

一個小例子:

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

感謝您的回答,但解引用正是我所要避免的。我試圖讓它透明。如果我不能,我會通過get和set方法創建類。 – dsimonet

+0

對於我來說,帶有二傳手和得分手的上課會更好。 – Netherwire