Chinaunix首页 | 论坛 | 博客
  • 博客访问: 444354
  • 博文数量: 78
  • 博客积分: 2307
  • 博客等级: 上尉
  • 技术积分: 920
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-04 00:31
个人简介

IT老鸟,信息安全硕士。

文章分类
文章存档

2017年(2)

2012年(21)

2011年(55)

分类: C/C++

2011-09-13 15:00:41

新学C++,类的写法基本一样。继承
除了protect以外主要是private和public两种
首先上主函数,不管Rectangle.h怎么写。主函数就这样了。引用Rectangle类。
  1. //7_11.cpp
  2. #include <iostream>
  3. #include <cmath>
  4. #include "Rectangle.h"
  5. using namespace std;

  6. int main(){
  7.     Rectangle rect;
  8.     rect.InitR(2,3,20,10);
  9.     rect.Move(3,2);
  10.     std::cout<<"The data of rect(X,Y,W,H):"<<endl;
  11.     
  12.     
  13.     cout<<rect.GetX()<<",";
  14.     cout<<rect.GetY()<<",";

  15.     cout<<rect.GetW()<<",";
  16.     cout<<rect.GetH()<<",";
  17.     cout<<endl;
  18. return 0;
  19. }
下面是不太良好的设计方式
  1. //Rectangle.h
  2. class Point{
  3. public:
  4.     void InitP(float xx=0,float yy=0){X=xx;Y=yy;}
  5.     void Move(float xOff,float yOff){X+=xOff;Y+=yOff;}
  6.     float GetX(){return X;}
  7.     float GetY(){return Y;}
  8. private:
  9.     float X,Y;
  10. };
  11. //修饰成为public 子类自动获得父类所有的方法。
  12. //修饰成为private则需要开外挂。重写并且引用父类的方法
  13. class Rectangle: private Point{
  14. public:
  15.     void InitR(float x,float y,float w,float h)
  16.         {Point::InitP(x,y);W=w;H=h;}
  17.     void Move(float x,float y){Point::Move(x,y);}//新方法
  18.     float GetX(){return Point::GetX();}//新方法
  19.     float GetY(){return Point::GetY();}//新方法
  20.     float GetH(){return H;}
  21.     float GetW(){return W;}
  22. private:
  23.     float W,H;
  24. };
在类Rectangle里面重写了父类的三个方法。这里父类是私有继承
随着父类的修改。子类也要修改。这里还是有关联。不好。应该这样写。
  1. //Rectangle.h
  2. class Point{
  3. public:
  4.     void InitP(float xx=0,float yy=0){X=xx;Y=yy;}
  5.     void Move(float xOff,float yOff){X+=xOff;Y+=yOff;}
  6.     float GetX(){return X;}
  7.     float GetY(){return Y;}
  8. private:
  9.     float X,Y;
  10. };
  11. //修饰成为public 子类自动获得父类所有的方法。
  12. //修饰成为private则需要开外挂。重写并且引用父类的方法
  13. class Rectangle: private Point{
  14. public:
  15.     void InitR(float x,float y,float w,float h)
  16.         {InitP(x,y);W=w;H=h;}
  17.     
  18.     float GetH(){return H;}
  19.     float GetW(){return W;}
  20. private:
  21.     float W,H;
  22. };
子类就写子类的,和父类无关。不过看起来第一个方法好像也无关。
 通过读<冒号课堂>我理解的里面更推荐第二种写法。其实第一种也不用关注细节。
问题挂在这里。如果有那个朋友看到了能否解答一下。


阅读(1559) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~