2015-09-16 18 views
-1

的我其簡述如下 首先,他們在一個類中定義一個結構的碼:Type在C++對象

Struct Energy{ 
double elas; 
double slip; 
double dash; 
} 

。 。 。 然後它們定義該結構的一個對象

Energy* Prop; 

。 。 。 然後,他們用它來寫的條件如下

if (!Prop){ 
Prop->elas = elas_; 
Prop->slip = slip_; 
Prop->dash = dash_; 
} 

令我迷惑是因爲我知道道具的類型是能源。所以他們如何在if條件下使用它。我是C++的新手,有很多我不明白的東西。希望你們幫我解決這個問題?

謝謝

+2

您需要花費至少一週的時間閱讀一本好的[C++編程](http://www.stroustrup.com/Programming/)書,並且您應該專注於C++ 11或更高版本。另見[this](http://en.cppreference.com/w/cpp)。我們不能在幾分鐘內教你C++。 –

+1

代碼錯誤和錯誤([未定義的行爲](http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html)),除非你替換if(!Prop )'by'if(Prop!= nullptr)'或者只是'if(Prop)' –

+0

是的,我只複製了一部分我認爲與我的問題有關的代碼。當然,我需要了解更多。感謝您的意見 – Nick

回答

3

注意能源後到來的變量聲明這意味着道具類型能源*的明星,

Energy* Prop; 

,這意味着它是一個指向能源類型。指針可以指向一個實例(有效或沒有,但不是這個問題的範圍),也可以指向一個實例,也稱爲null。

在條件中使用時,指針的工作方式幾乎是一個整數值,如果它爲零(或爲空),則爲false,否則爲true。

寫入if (!prop)檢查指針是否爲空。

if (!prop) { 
    // prop is null, handle error 
} 
else { 
    // prop points to something, you can use it 
} 

編輯:但如果你正在使用C++ 11或更高版本看看nullptr

+2

if(!prop)'不檢查指針*是否爲null? ('非非零'?) –

+1

我的錯誤,你是正確的。這意味着OP的答案中的代碼也不正確。 – aslg

1

道具是指針到能源結構,這意味着它可以爲空(點什麼)。如果指針不爲null,則指針爲真。

+0

謝謝漫遊,道具應該是假的所以!表達式可以是真實的。因此,如果他們像這樣定義Prop並且沒有分配任何東西,那麼Prop可以是null(這意味着False)。這是對的嗎? – Nick

+0

如果他們沒有分配一些東西可以字面上任何東西。但是,是的,它可能是空的。閱讀指針,你會使用它們很多。 –

0

if (!Prop)意味着if (Prop != 0)if (Prop != nullptr)

+0

或更好'if(Prop!= nullptr)' – Jens

+0

它可能有兩個含義?我只是想,如果條件需要真或假。所以!Prop應該是true或false作爲第二個選項 – Nick