2016-08-12 75 views
0

是否可以在一個語句中設置多個不同的類成員?中如何做到這一點做到了一個例子:C++設置多個類成員

class Animal 
{ 
    public: 
     int x; 
     int y; 
     int z; 
}; 

void main() 
{ 
    Animal anml; 

    anml = { x = 5, y = 10, z = 15 }; 
} 
+2

'無效的主要()'在C++非法。在獲得票證之前,你會想把它改成'int main()'。 –

+3

您需要查看[彙總](http://stackoverflow.com/q/4178175/2069064)是什麼。 – Barry

回答

2

「轉換」巴里的評論到一個答案,是的,the conditions here下:

聚集是一個數組或類(第9條)沒有用戶聲明的 構造函數(12.1),沒有私有或受保護的非靜態數據成員 (第11章),沒有基類(第10節),也沒有虛函數 (10.3)。

例子:

class Animal 
{ 
    public: 
     int x; 
     int y; 
     int z; 
}; 

int main() { 
    Animal anml; 

    anml = { 5, 10, 15 }; 
    return 0; 
} 

(按照加入與this meta post這個社會維基答案)

1

您可以隨時超載的構造方法或創建方法在一個聲明中說:「設置多個不同的對象屬性「:

class Animal { 
public: 
    Animal() { 

    }; 

    Animal(int a, int b, int c) { 
    x = a; 
    y = b; 
    z = c; 
    } 

    void setMembers(int a, int b, int c) { 
    x = a; 
    y = b; 
    z = c; 
    } 

private: 
    int x; 
    int y; 
    int z; 
}; 

int main() { 
    // set x, y, z in one statement 
    Animal a(1, 2, 3); 

    // set x, y, z in one statement 
    a.setMembers(4, 5, 6); 

    return 0; 
} 
0

動物解決方案1(http://ideone.com/N3RXXx

#include <iostream> 

class Animal 
{ 
    public: 
     int x; 
     int y; 
     int z; 
     Animal & setx(int v) { x = v; return *this;} 
     Animal & sety(int v) { y = v; return *this;} 
     Animal & setz(int v) { z = v; return *this;} 
}; 

int main() { 
    Animal anml; 
    anml.setx(5).sety(6).setz(7); 
    std::cout << anml.x << ", " << anml.y << ", " << anml.z << std::endl; 
    return 0; 
} 

溶液2爲任何類xyhttps://ideone.com/xIYqZY

#include <iostream> 

class Animal 
{ 
    public: 
     int x; 
     int y; 
     int z; 
}; 


template<class T, class R> T& setx(T & obj, R x) { obj.x = x; return obj;} 
template<class T, class R> T& sety(T & obj, R y) { obj.y = y; return obj;} 

int main() { 
    Animal anml; 
    sety(setx(anml, 5), 6); 
    std::cout << anml.x << ", " << anml.y << std::endl; 
    return 0; 
}