2016-02-27 77 views
0

我在這裏有一個簡單的類,帶有一個變量。爲什麼它不返回變量10.5的值?帶浮點變量的類

輸出

Test! -1.09356e+09 

代碼

#include "iostream" 

using namespace std; 

class Txtbin{ 
    protected: 
     float area; 

    public: 
     Txtbin(); 
     float get_area(); 
}; 

Txtbin::Txtbin(){ 
    float area = 10.5; 
} 

float Txtbin::get_area(){ 
    return area; 
} 

int main(int argc, char* argv[]){ 
    Txtbin a; 
    cout << "Test! " << a.get_area() << endl; 

    return 0; 
} 
+0

[Mine tell](http://ideone.com/izrx32)'測試! 0'。 –

+0

未定義的行爲,因爲您打印未初始化的成員變量的不確定值。 –

+0

這就是爲什麼你編譯警告,並注意它們。 –

回答

5

這是創建一個局部變量,沒有初始化您的會員:

Txtbin::Txtbin(){ 
    float area = 10.5; // creates a variable called area that isn't used. 
} 

你應該初始化您的會員這樣

Txtbin::Txtbin() 
: area(10.5) 
{ 
} 

也許在課堂上直接,如果你正在使用C++ 11或更高版本:

class Txtbin{ 
    protected: 
     float area = 10.5; 

    public: 
     Txtbin(); 
     float get_area(); 
}; 
+0

當我直接初始化變量時,我得到這個'txtbin.cpp:11:16:warning:非靜態數據成員初始值設定項只能用於-std = C++ 11或-std = gnu ++ 11 float area = 10.5 ; ' – clarkk

+0

@clarkk:是的。我猜你正在使用gcc。它默認不使用C++ 11。 –

0

您的新area此處的聲明陰影成員。

Txtbin::Txtbin(){ 
    float area = 10.5; 
} 

如果讓更多的/所有警告,編譯器可能會告訴你一樣多。

例如

$ clang++ -Weverything tmp/foo.cpp 
tmp/foo.cpp:16:11: warning: declaration shadows a field of 'Txtbin' [-Wshadow] 
    float area = 10.5; 
     ^
tmp/foo.cpp:8:15: note: previous declaration is here 
     float area; 
      ^
tmp/foo.cpp:16:11: warning: unused variable 'area' [-Wunused-variable] 
    float area = 10.5; 
     ^
tmp/foo.cpp:23:14: warning: unused parameter 'argc' [-Wunused-parameter] 
int main(int argc, char* argv[]){ 
      ^
tmp/foo.cpp:23:26: warning: unused parameter 'argv' [-Wunused-parameter] 
int main(int argc, char* argv[]){ 
         ^
4 warnings generated. 

而是做到這一點,在構造函數中使用成員初始化。

class Txtbin{ 
    protected: 
     float area; 

    public: 
     Txtbin(); 
     float get_area(); 
}; 

Txtbin::Txtbin() 
    : area(10.5) { 
}