2014-03-02 59 views
0

我有使用Java的經驗,但最近開始在C++中工作,我對理解後者中的內存是如何存儲有點麻煩。在Java中,以下是有效的:將構造函數中的值傳遞給類中的私有整數

class Class { 
    int myInt; 

    public Class(int myInt) { 
     this.myInt = myInt; 
    } 
} 

所以我必須在類中的一個整數,我給它的值創建對象時。我想在C++中複製它:

class Class { 
     int myInt; 
    public: 
     Class (int myInt) { 
      // What goes here? 
     } 
}; 

但是這不起作用。如果我將名稱傳遞給構造函數的變量不是myInt,我可以簡單地聲明myInt = differentName。但是,假設像在Java中一樣,我希望傳遞給構造函數的變量和變量的名稱都相同?我怎樣才能做到這一點?

回答

5

兩個選項:

  • 使用的Initializer list

    class Class { 
         int myInt; 
        public: 
         Class (int myInt) : myInt(myInt) 
         { 
         } 
    }; 
    
  • 什麼你有意尋找:

    class Class { 
         int myInt; 
        public: 
         Class (int myInt) 
         { 
          Class::myInt = myInt; 
         } 
    }; 
    

但是,第一個是首選。

+0

我不認爲OP是故意尋找第二個變體。他們只是不知道如何在C++構造函數中初始化數據成員。 – juanchopanza

+0

@juanchopanza:他正在尋找一個'this.myInt = myInt;'等價物。如果爲此創建setter,則不能使用初始化程序列表。 –

+0

不太確定。正如我所說的,他們不知道如何用C++初始化某些東西。他們只是展示瞭如何在Java中做類似的事情。 – juanchopanza

2

你只需要使用構造函數初始化列表:

class Class { 
     int myInt; 
    public: 
     Class (int myInt) : myInt(myInt) 
     { 
      // by the time you get here, myInt is already initialized. 
      // You can assign a value to it or modify it otherwise, 
      // but you cannot initialize something more than once. 
     } 
}; 

,唯一的辦法,以明確初始化在構造函數中的數據成員。一旦你在構造函數的主體中,所有的數據成員都被初始化了。

2

除了初始化程序的語法,this也可用C++。你會用它作爲this->myInt,因爲this是一個指針。

1

「this」是C++中的指針。因此這將是

this->myInt = myInt; 
0

以下是實現相同c的方式++ 這 - >敏=敏;

相關問題