Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)qqpublished in(发表于) 2014/7/9 22:36:45 C++面向对象基本概念解析[二]
C/C++面向对象基本概念解析面向对象(Object-Oriented,OO),是一种软件开发的方法学,分为面向对象的分析OOA(Object-Oriented Analysis)、面向对象的设计OOD(Object Oriented Design)、面向对象的建模OOM(Object Oriented Modeling)、面向对象的编程OOP(Object Oriented Programing)和面向对象的测试OOT(Object Oriented Test)等子过程。程序描述:OOP 综合样板,清晰地演示说明了分类、继承、封装和多态的C++实现方法。【源程序 2-2】 01 #include 02 using namespace std;0304 class Location05 {06 protected:07 int x;08 int y;09 public:10 Location(int InitX,int InitY);11 int GetX();12 int GetY();13 void SetX(int InitX);14 void SetY(int InitY);15 virtual void Show() { };16 virtual void Hide()=0;17 };1819 enum Boolean{FALSE,TRUE};20 enum PointType{FreePoint, Online, CircleCenter };21 class Point : public Location22 {23 public:24 PointType PType;25 private:26 Boolean Visible;27 protected:28 static int NumOfInstances;29 public:30 Point(int InitX=0,int InitY=0, PointType InitPType=FreePoint);31 Point(Point& APoint);32 ~Point();33 virtual void Show();34 void Show(int ColorID);35 virtual void Hide();36 void MoveTo(int NewX=0,int NewY=0);37 static int getNumOfInstances()38 {return NumOfInstances;}39 Boolean GetVisible();40 protected:41 void SetVisible(Boolean NewVisible)42 { Visible=NewVisible; }43 private:44 void AssignAPoint(Point& P);45 };4647 class Circle : public Point48 {49 protected:50 int Radius;51 public:52 Circle(int InitRadius=0,int InitX=0,int InitY=0);53 Circle(Point& InitCenterPoint,int InitRadius=0);54 Circle(Circle& ACircle);55 ~Circle();56 int GetRadius() { return Radius;}57 virtual void Show();58 virtual void Hide();59 void Expand(int ExpandBy);60 };6162 Location::Location(int InitX,int InitY)63 {64 x=InitX;65 y=InitY;66 }6768 int Location::GetX()69 { return x; }7071 int Location::GetY()72 { return y; }7374 void Location::SetX(int InitX)75 { x=InitX;}76 void Location::SetY(int InitY)77 { y=InitY; }7879 int Point:: NumOfInstances=0;8081 Point::Point(int InitX,int InitY, PointType InitPType)82 :Location(InitX, InitY)83 {84 NumOfInstances++;85 PType=InitPType;86 }8788 void Point:: AssignAPoint(Point& P)89 {90 NumOfInstances++;91 PType= P.PType;92 }93 Point::Point(Point& APoint) :Location(APoint.x, APoint.GetY())94 {95 AssignAPoint(APoint);96 }9798 Point::~Point()99 {100 NumOfInstances--;101 cout<<"~Point ";102 }103 Boolean Point::GetVisible()104 { return Visible; }105 void Point::Show()106 {107 Visible=TRUE;108 cout<<"ShowPoint:"109 <<"("<<"x="<110 <<"Visible="<111 <<"PType=" << PType <<")n";112 }113114 void Point::Show(int ColorID)115 {116 Visible=TRUE;117 cout<<"ShowPoint:"118 <<"("<<"x="<119 <<"Visible="<120 <<"PType=" << PType <<", "121 <<"ColorID=" <122 }123124 void Point::Hide()125 {126 Visible=FALSE;127 cout<<"The point:("<128 }129 void Point::MoveTo(int NewX,int NewY)130 {131 if(Visible) Hide();132 x=NewX;133 y=NewY;134 Show();135 }136137 Circle::Circle(int InitRadius, int InitX,int InitY)138 : Point(InitX,InitY, CircleCenter)139 {140 Radius=InitRadius;141 }142 Circle::Circle(Point& InitCenterPoint, int InitRadius)143 : Point(InitCenterPoint)144 {145 Radius=InitRadius;146 PType=CircleCenter;147 }148149 Circle::Circle(Circle& ACircle)150 :Point(ACircle.GetX(), ACircle.GetY(), ACircle.PType)151 {152 Radius=ACircle.GetRadius();153 }154155 Circle::~Circle()156 {157 cout << "n~Circle ";158 }159 void Circle::Expand(int ExpandBy)160 {161 Radius+=ExpandBy;162 if(Radius<0) Radius=0;163 Show();164 }165 void Circle::Show()166 {167 SetVisible(TRUE);168 cout<<"Show Circle:"169 <<" Centre is ("170 <171 <<"Radius="<172 }173 void Circle::Hide()174 {175 SetVisible(FALSE);176 cout<<"Hide the circle!!!"<<"n";177 cout<<"The centre of the circle is:("178 <179 cout<<"The Radius of the circle is:"<180 cout<<"the Circle is Hidden"<<"n";181 }182183 void main()184 {185 cout<<"--Using Point Class--"<<"n";186 cout<<"NumOfInstances="187 <188 Point P1(2,9, Online), P2(2,9), P3(2), P4;189 Point P5(P1);190 P1.Show();191 P1.Show(4);192 P2.Show();193 P3.Show();194 P4.Show();195 P5.Show();196197 cout <<"n";198 cout<< "Access P1's all Members:"<<"n";199 cout<<"NumOfInstances="200 <201 <<"P1.x="<202 << "P1.y="<203 <<"P1.PType="<204 <<"P1.Visible="<205206 {207 //通过类实例数组演示局部变量及其析构208 Point PArr[4];209 cout<<"NumOfInstances="210 <211212 Point* PtrArr=PArr;213 for (int i=0; i<4; i++)214 {215 cout << "i=" <216 PArr->SetX(i);217 PArr->SetY(i+i);218 PArr->Show();219 PtrArr=PtrArr+1;220 }221 }222 cout<<"NumOfInstances="223 <224225 Point *PtrP1;226 PtrP1=&P1;227 cout<< "Access P1 using PtrP1:" <<"n";228 PtrP1->Show();229 cout<<"NumOfInstances="230 <getNumOfInstances()<<"n"231 <<"PtrP1->x="<GetX()<<", "232 <<"PtrP1->y="<GetY()<<", "233 <<"PtrP1->PType="<PType<<", "234 <<"PtrP1->Visible="<GetVisible()<<"nn";235236 cout<<"--Using Circle Class--"<<"n";237 cout<<"NumOfInstances="238 <239 Circle C1(99, 3, 8), C2(99, 3), C3(99), C4(1,1), C5(P1,88), C6(P1);240 Circle C7(C1);241242 cout<<"After run Circle C6(C1), NumOfInstances="243 <244245 C1.Show();246 C2.Show();247 C3.Show();248 C4.Show();249 C5.Show();250 C6.Show();251 C7.Show();252253 cout<< "nAccess C1's all members: ";254 cout <<"C1.Radius="<255 <<"C1.x="<256 << "C1.y="<257 <<"C1.PType="<258 <<"C1.Visible="<259260 Circle* PtrC1;261 PtrC1=&C1;262 cout<< "Access C1 using PtrP1:" <<"n";263 PtrC1->Show();264 cout<<"NumOfInstances="265 <getNumOfInstances()<<"n"266 <<"PtrC1->Radius="<GetRadius()<<"n"267 <<"PtrC1->x="<GetX()<<","268 <<"PtrC1->y="<GetY()<<","269 <<"PtrC1->PType="<PType<<", "270 <<"PtrC1->Visible="<GetVisible()<<"n";271272 cout << "Call C1.Expand(20):n";273 C1.Expand(20);274 cout<<"n";275276 cout<<"Access C1 using Parent Class Pointer:PtrP1:" <<"n";277 PtrP1=&C1;278 PtrP1->Show(); //Calling Point.Show() or Circle.Show() ?279 cout<<"NumOfInstances="280 <getNumOfInstances()<<"n"281 //<<"PtrP1->Radius="<GetRadius()<<"n"// Why?282 <<"PtrP1->x="<GetX()<<","283 <<"PtrP1->y="<GetY()<<","284 <<"PtrP1->PType="<PType<<","285 <<"PtrP1->Visible="<GetVisible()<<"n";286287 /*--Advanced OOP -- */288 //P1.AssignAPoint(&P1); Why not be permitted?289 // Location L1(2,9); Why not be permitted?290 }程序说明:(1) 本程序第1~61 行完成了Location、Point 和Circle 这3 个类的定义;第62~181 行完成了这3 个类的实现,即对类中定义的成员函数给出实现代码和对特殊成员变量进行初始化(第79 行);第183~290 行对这3 个类演示了各种应用和操作,图2.2 给出了这些应用的输出结果。图 2.2 OOP 综合样板程序的输出结果(2) 该程序包括了OOP 的基本概念的定义、实现和应用技术,本章的后续内容将陆续予以分析和说明。
赞