Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)qq
published in(发表于) 2014/7/9 22:36:45
C++面向对象基本概念解析[二]

C/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;

03

04 class Location

05 {

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 };

18

19 enum Boolean{FALSE,TRUE};

20 enum PointType{FreePoint, Online, CircleCenter };

21 class Point : public Location

22 {

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 };

46

47 class Circle : public Point

48 {

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 };

61

62 Location::Location(int InitX,int InitY)

63 {

64 x=InitX;

65 y=InitY;

66 }

67

68 int Location::GetX()

69 { return x; }

70

71 int Location::GetY()

72 { return y; }

73

74 void Location::SetX(int InitX)

75 { x=InitX;}

76 void Location::SetY(int InitY)

77 { y=InitY; }

78

79 int Point:: NumOfInstances=0;

80

81 Point::Point(int InitX,int InitY, PointType InitPType)

82 :Location(InitX, InitY)

83 {

84 NumOfInstances++;

85 PType=InitPType;

86 }

87

88 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 }

97

98 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 }

113

114 void Point::Show(int ColorID)

115 {

116 Visible=TRUE;

117 cout<<"ShowPoint:"

118 <<"("<<"x="<
119 <<"Visible="<
120 <<"PType=" << PType <<", "

121 <<"ColorID=" <
122 }

123

124 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 }

136

137 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 }

148

149 Circle::Circle(Circle& ACircle)

150 :Point(ACircle.GetX(), ACircle.GetY(), ACircle.PType)

151 {

152 Radius=ACircle.GetRadius();

153 }

154

155 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 }

182

183 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();

196

197 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="<
205

206 {

207 //通过类实例数组演示局部变量及其析构

208 Point PArr[4];

209 cout<<"NumOfInstances="

210 <
211

212 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 <
224

225 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";

235

236 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);

241

242 cout<<"After run Circle C6(C1), NumOfInstances="

243 <
244

245 C1.Show();

246 C2.Show();

247 C3.Show();

248 C4.Show();

249 C5.Show();

250 C6.Show();

251 C7.Show();

252

253 cout<< "nAccess C1's all members: ";

254 cout <<"C1.Radius="<
255 <<"C1.x="<
256 << "C1.y="<
257 <<"C1.PType="<
258 <<"C1.Visible="<
259

260 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";

271

272 cout << "Call C1.Expand(20):n";

273 C1.Expand(20);

274 cout<<"n";

275

276 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";

286

287 /*--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 的基本概念的定义、实现和应用技术,本章的后续内容将陆续予以分析和说明。




If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759