2014-03-26 47 views
1

我有一個具有幾個int和一個const int成員且定義了構造函數的類。使用int成員實現哪些運算符

class SomeContainer 
{ 
    public: 
     SomeContainer(): 
      member1(0), 
      member2(staticMethod()) 
     {} 
    private: 
     static int staticMethod(); 
     int member1; 
     const int member2; 
} 

我需要的,因爲我使用這個類在另一個類MainClass和代碼

MainClass* p1; 
MainClass* p2 
{ 
    //... 
    *p1 = *p2 // fails since SomeContainer doesn't have copy assignment operator 
} 

如果這個代碼是不夠還是我失去任何東西來創建一個賦值運算符?

{ 
    SomeContainer(const SomeContainer& other): // copy ctor 
     member1(other.member1), 
     member2(other.member2) 
    {} 


    SomeContainer& operator=(const SomeContainer& other) // assignment operator 
    { 
     member1 = other.member1; 
    } 
} 

如何移動ctor和移動任務?我是否也需要實施這些?

+2

'P1 = P2;'無關與類的拷貝賦值運算符。這些都是指針。 – chris

+1

推測你的意思是'* p1 = * p2'? –

+0

@ 0x499602D2:如果他想複製,那麼他會這麼做,因爲'const'成員意味着不存在默認的賦值語義。 –

回答

1

你寫的是足夠的。

如果不存在移動構造函數,則會使用複製構造函數,而在此移動語義實際上沒有任何用處。

2

首先,如果p1p2是指針,那麼你可以指定它們。

如果移動構造函數不存在,則將使用複製構造函數。

我仍然很難理解,允許賦值給具有常數非靜態部分的東西的邏輯意義。

+0

推測「const」成員是實例的某種唯一ID。對於具有值語義的類型,這應該保持不受賦值運算符的影響是非常正確的。 –

+0

@LightnessRacesinOrbit:對於我來說,值語義意味着身份不起作用,並且在這樣的背景下,唯一的ID沒有多大意義。 – 6502

+0

好吧,我想給你。 –

0

剛剛從該成員刪除常量,如果你真的需要分配

相關問題