2015-09-22 134 views
-2

我是C++的新手,這個問題可能很容易爲你解答。我無法找到這種語法的實際含義。所以我有:int *是什麼。語法呢?

struct Vec {   
double x, y, z; 
Vec(double x_=0, double y_=0, double z_=0){ x=x_; y=y_; z=z_; } 
}; 

int w = 1024, h = 768; 
Vec cx = Vec(w*.5135/h); 

最後一行發生了什麼?我正在創建一個Vec類型的新結構,還有什麼? 在此先感謝。

+1

這是一個乘法運算符。 – juanchopanza

+1

與'w * 0.5135/h'相同 – BlackDwarf

+2

不使用[幻數](https://en.wikipedia.org/wiki/Magic_number_(編程))的另一個原因。 – Jarod42

回答

2

這是寫浮點數的簡短方法。你可以通過兩種方式來做到這一點(當然,它必須是雙重浮動)。的十進制數在3份(不包括是符號)被劃分:

123 . 456 
| | \_fractional part 
| | 
| \_decimal point 
| 
integer part 
  • 在整數部分等於0但小數部分不是:

    double x = .123; // the same as writing 0.123 
    
  • 當的小數部分等於0但整數部分是不:

    double x = 123.; // the same as writing 123.0 
    

*只是您的標準乘法。您只是將整數w乘以一個整數部分等於0的十進制數.5135

2

它等同於:通過調用它的構造Vec(double x_=0, double y_=0, double z_=0)

Vec cx = Vec(w*0.5135/h); 
+0

好的謝謝..對不起,我不知道它的意思是0.5135。關於Vec cx = Vec(...)?這是一種初始化結構的方法嗎?我總是習慣於:Vec cx = {x,y,z};爲什麼等號後有第二個「Vec」,爲什麼只有當結構需要3個值時才使用1值? – Tarta

+0

這叫做類構造函數,很可能你在這裏設置向量的大小。 – hasan83

+0

但結構構造函數是您可以在上面看到的結構構造函數,它接受3個值。 – Tarta

1

在你與Vec類型的新構造函數實例assignming cx最後一排。

Vec cx = Vec(w*.5135/h); 

是一樣的:

Vec cx = Vec(w*0.5135/h, 0, 0); 

因爲對於由構造中定義的參數的缺省值。

浮點數不必以C++中的0開頭。

assert(0.5135 == .5135); // True 

所以w*.5135只是一個整數w和雙0.5135乘法。