Mathsniper study note

Monday, April 17, 2006

關于C++中繼承(inheritance)範例

這裏我會演示一下 C++中繼承的簡單操作,其中我會使用基類Point和派生類Circle,Point class中其數據成員為protected權限,這使得Circle Object function可以訪問Point數據。
point.cpp
#include

using namespace std;

class Point {
public:
Point( int = 0, int = 0 );
~Point();
protected:
int x, y;
};

Point::Point( int a, int b )
{
x = a;
y = b;
cout << "Point Constructor: "
<< '[' << x << ", " << y << ']' << endl;
}

Point::~Point()
{
cout << "Point Destructor: "
<< '[' << x << ", " << y << ']' << endl;
}

class Circle : public Point {
public:
Circle( double r = 0.0, int a = 0, int b = 0 );
~Circle();
private:
double radius;
};

Circle::Circle( double r, int a, int b )
: Point( a, b )
{
radius = r;
cout << "Circle Constructor: "
<< "radius = " << radius
<< ", x = " << x
<< ", y = " << y << endl;
}

Circle::~Circle()
{
cout << "Circle Destructor: "
<< "radius = " << radius
<< ", x = " << x
<< ", y = " << y << endl;
}
int main()
{
Point p( 11, 22 );
Circle circle1( 3.12, 14, 19 );
cout << endl;
Circle circle2( 11.2, 34, 13 );
cout << endl;
return 0;
}
[/code]
其中輸出數據如下:

mathsniper:~# ./point
Point Constructor: [11, 22]
Point Constructor: [14, 19]
Circle Constructor: radius = 3.12, x = 14, y = 19

Point Constructor: [34, 13]
Circle Constructor: radius = 11.2, x = 34, y = 13

Circle Destructor: radius = 11.2, x = 34, y = 13
Point Destructor: [34, 13]
Circle Destructor: radius = 3.12, x = 14, y = 19
Point Destructor: [14, 19]
Point Destructor: [11, 22]

留意下數據base class(Point)和derived class(Circle) constructor,desstructor的輸出順序,
當我們要生成一個Circle Object(這裏為Circle 1及Circle 2)時,它先會調用base class constructor,再調用自身的constructor,當main function執行return 0後,先調用自身destructor,再繼而調用base class destructor,整個過程似是Stack的操作。事實上是如似的。

0 Comments:

Post a Comment

<< Home