C++封裝 之 物件成員指標
阿新 • • 發佈:2021-08-25
物件成員指標
概念:
- 物件成員是指一個類的物件是另一個類的資料成員。
- 物件成員指標是指,指向一個類的物件的指標作為另一個類的資料成員(強調:只是一個指標,而不是一個物件)
例項:座標類和線段類
/***************** 定義 Coordinate 類 *****************/ class Coordinate{ public: Coordinate(); ~Coordinate(); private: int m_iX; int m_iY; }; /***************** 定義 Line 類 *****************/ class Line{ public: Line(); //預設建構函式 ~Line(); private: Coordinate m_CoorA; //物件成員 Coordinate m_CoorB; //物件成員 };
將Line類中的物件成員更改為物件成員指標。注意:物件成員指標只是一個指向Coordinate物件的指標,而不是一個Coordinate物件
/***************** 定義 Line 類 *****************/
class Line{
public:
Line(); //預設建構函式
~Line();
private:
Coordinate *m_pCoorA; //物件成指標
Coordinate *m_pCoorB; //物件成員指標
};
demo.cpp原始碼
/****************************************************** * 物件成員指標 * 要求: * 定義兩個類: * 座標類:Coordinate * 資料成員:建構函式、解構函式、資料封裝函式 * 線段類:Line * 資料成員:點A指標m_pCoorA、點B指標m_pCoorB * 成員函式:建構函式、解構函式、資訊列印函式 * ******************************************************/ #include<iostream> using namespace std; /***************** 定義 Coordinate 類 *****************/ class Coordinate{ public: Coordinate(int x, int y); //有引數的建構函式 ~Coordinate(); int getX(); int getY(); private: int m_iX; int m_iY; }; /***************** 定義 Line 類 *****************/ class Line{ public: Line(int x1, int y1, int x2, int y2); //預設建構函式 ~Line(); void printInfo(); private: Coordinate *m_pCoorA; // 物件成員指標 (只是一個指向Coordinate物件的指標,而不是一個Coordinate物件,所以訪問資料成員時需注意) Coordinate *m_pCoorB; // 物件成員指標 }; /********************** Coordinate類的函式 ***************************/ Coordinate::Coordinate(int x, int y){ //建構函式 m_iX = x; m_iY = y; cout << "Coordinate():(" <<m_iX <<" , "<< m_iY << ")"<<endl; } Coordinate::~Coordinate(){ //解構函式 cout << "~Coordinate():(" <<m_iX <<" , "<< m_iY << ")"<<endl; } int Coordinate::getX(){ return m_iX; } int Coordinate::getY(){ return m_iY; } /********************** Line類的函式 ***************************/ Line::Line(int x1, int y1, int x2, int y2){ //建構函式 m_pCoorA = new Coordinate(x1, y1); //堆中申請記憶體例項化物件 m_pCoorB = new Coordinate(x2, y2); cout << "Line()"<<endl; } Line::~Line(){ //建構函式 delete m_pCoorA; m_pCoorA = NULL; delete m_pCoorB; m_pCoorB = NULL; cout << "~Line()"<<endl; } void Line::printInfo(){ //列印兩個點的座標,由於m_pCoorA是指標,而不是物件,所以訪問資料成員用"->",而不是"." cout << "A = ("<< m_pCoorA->getX() << "," << m_pCoorA->getY() << ")" << endl; cout << "B = ("<< m_pCoorB->getX() << "," << m_pCoorB->getY() << ")" << endl; } /************************** 測試主函式 *******************************/ int main(){ Line *p = new Line(5,6,7,8); // 宣告Line型別的指標 p->printInfo(); //列印 cout<<"sizeof(p) = "<<sizeof(p)<<endl; //一個指標的大小 cout<<"sizeof(Line) = "<<sizeof(Line)<<endl<<endl;//Line物件的大小(佔兩個指標) delete p; // 銷燬Line物件 p = NULL; //置空指標 system("pause"); return 0; }
執行結果:
Coordinate():(5 , 6)
Coordinate():(7 , 8)
Line()
A = (5,6)
B = (7,8)
sizeof(p) = 4
sizeof(Line) = 8
~Coordinate():(5 , 6)
~Coordinate():(7 , 8)
~Line()