1. 程式人生 > >C++ 類的相關語法,符號:和::的用法

C++ 類的相關語法,符號:和::的用法

#include <iostream>
#include <cmath>
using namespace std;

//class 派生類名 : 繼承方式 基類名

//聲明瞭一個類C,類C裡聲明瞭一個成員函式void F(),
//但沒有在類的聲明裡給出F()的定義,那麼在類外定義F()時,
//就要寫成void C::F(),表示這個F()函式是類A的成員函式。

class Point
{
private:
    int X,Y;
public:
    Point(int xx=0,int yy=0)//類Point的建構函式
    {
        X=xx;
        Y=yy;
    }
    //拷貝建構函式,Point(Point &p)表示p是point類的一個物件,
//而&p則是這個物件的引用(也就是這個物件的地址)。這是拷貝建構函式的規定,不能變。 Point(Point &p); int GetX(){return X;} int GetY(){return Y;} }; //表示引用成員函式及變數,作用域成員運算子 //例:System::Math::Sqrt()相當於System.Math.Sqrt() //作用域符號::的前面一般是類名稱,後面一般是該類的成員名稱, //C++為例避免不同的類有名稱相同的成員而採用作用域的方式進行區分 //如:A,B表示兩個類,在A,B中都有成員member。那麼 // A::member就表示類A中的成員member.
// B::member就表示類B中的成員member. Point::Point(Point &p)//拷貝建構函式的實現 { X=p.X; Y=p.Y; cout<<"Point拷貝建構函式被呼叫!"<<endl; } class Line { private: Point p1,p2; double len; public: Line(Point xp1,Point yp2);//類Line的建構函式 Line(Line &L); double GetLen(){return len;} }; //1、初始化列表的作用相當於在建構函式內進行相應成員變數的賦值,但兩者是有差別的。
//2、初始化的順序與成員變數聲名的順序相同。 //例:class myClass //{ //public : // myClass();// 建構函式,無返回型別,可以有引數列表,這裡省去 // ~myClass();// 解構函式 // int a; // const int b; //} //myClass::myClass():a(1),b(1)// 初始化列表 //{ //} //1、 //在初始化列表中是對變數進行初始化,而在建構函式內是進行賦值操作。 //兩都的差別在對於像const型別資料的操作上表現得尤為明顯。 //我們知道,const型別的變數必須在定義時進行初始化,而不能對const型的變數進行賦值, //因此const型別的成員變數只能(而且必須)在初始化列表中進行初始化, //即下面的程式碼將會出錯: //myClass::myClass() //{ // a = 1;// 沒錯,效果相當於在初始化列表中進行初始化 // b = 1;// 出錯,const變數不能進行賦值操作; //} //2、 //myClass::myClass():b(1),a(b) //{ //} //這樣的執行結果a,b各是多少呢?b=1,a=1?不是,b=1而a是個隨機數。 //這一點是相當重要,一般在初始化列表中進行初始化時,初始化的順序應與宣告的順序保持一致, //防止出現不必要的錯誤。 Line::Line(Point xp1,Point yp2):p1(xp1),p2(yp2)//初始化列表 { cout<<"Line建構函式被呼叫!"<<endl; double x=double(p1.GetX()-p2.GetX()); double y=double(p1.GetY()-p2.GetY()); len=sqrt(x*x+y*y); } Line::Line(Line &L):p1(L.p1),p2(L.p2) { cout<<"Line拷貝建構函式被呼叫!"<<endl; len=L.len; } void main() { Point myp1(1,1),myp2(4,5); Line line(myp1,myp2); Line line2(line); cout<<"The Length of the line is:"; cout<<line.GetLen()<<endl; cout<<"The Length of the line2 is:"; cout<<line2.GetLen()<<endl; }