本文章是作者根據史蒂芬·普拉達所著的《C++ Primer Plus》而整理出的讀書筆記,如果您在瀏覽過程中發現了什麼錯誤,煩請告知。另外,此書由淺入深,非常適合有C語言基礎的人學習,感興趣的朋友可以自行閱讀此書籍。
上節我們實現了個向量類,這節我們主要對其中使用的C++技術做些說明。
向量類的說明
使用狀態成員
Vector類儲存了向量的直角座標和極座標。它使用名為mode的成員來控制使用的建構函式、reset()方法和過載的operator<<()函式使用哪種形式,其中列舉RECT表示直角座標模式、POL表示極座標模式。這樣的成員被稱為狀態成員,因為這種成員描述的是物件所處的狀態。以建構函式為例:
Vector::Vector(double n1, double n2, Mode form)
{
mode = form;
if(form == RECT)
{
x = n1;
y = n2;
set_mag();
set_ang();
}
else if (form == POL)
{
mag = n1;
ang = n2 / Rad_to_deg;
set_x();
set_y();
}
else{
cout << "Incorrect 3rd argument to Vector() --";
cout << "vector set to 0\n";
x = y = mag = ang = 0.0;
mode = RECT;
}
}
如果第三個引數是RECT或省略了,則將輸入解釋為直角座標;如果為POL,則將解釋為極座標。
我們可以在main函式中,使用VECTOR::vector::RECT或者VECTOR::vector::POL來決定輸入引數的含義。列舉型別定義在公有部分,因此可以使用如下的語句來建立物件:
Vector foolery(20.0, 30.0, VECTOR::Vector::POL);
為Vector類過載算數運算子
我們在Vector類中過載了兩次operator-(),那是因為,在C++中,-運算子已經有兩種含義。首先,使用兩個運算元,它是減法運算子。減法運算子是一個二元運算子,因為它有兩個運算元。其次,使用一個運算元時(如-x),它時負號運算子。這種形式被稱為一元運算子。首先是第一個,減法運算子過載:
Vector Vector::operator-(const Vector& b) const
{
return Vector(x - b.x, y - b.y);
}
對於直角座標而言,將x、y分量分別相減即可。
再看第二個,負號運算子過載:
Vector Vector::operator-() const
{
return Vector(-x, -y);
}
它只使用了一個運算元,假設為:
Vector vc(30.0, 40.0);
則取負號後為
(-30.0,-40.0),
函式過載指的是函式名稱相同,特徵標不同(引數列表不同)的函式。operator-()有兩種不同的定義,是因為它們的特徵標不同。需要注意的是,對於只有二元形式的運算子(如除法運算子),只能將其過載為二元運算子。