2016-02-27 44 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) { 
}