一个关于类中方法的问题

kaiseer8828 2013-03-01 10:18:09
今天突然发现一个关于类中方法的问题,如下:
Q:被动的方法如何表示?
例如:人会开车,我创建两个类,一个类为人类,一个类为车类,人类中有个方法为(开车),
那么车类中有必要包涵方法(能被人开)吗??这个方法有必要吗??在逻辑上多余吗?
请大神明示,小弟不胜感激,小弟是数学无脑粉,逻辑上我觉得怪怪的东西,即使实现了
我也觉得怪怪的
code:
class People{
string name;
void candrive(Car car); .....(1)
};

class Car {
int price;
void canbedrived(People people); .....(2)
};
(1)与(2)是否只有一个就够了??
...全文
100 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zilaishuichina 2013-03-07
  • 打赏
  • 举报
回复
我觉得 1、void candrive(Car car);应该是 bool CanDrive(Car car); Person 应该另外提供一个 void Drive(Car car) 2、void canbedrived(Car car)应该是 bool CanBeDrive(Person person);
引用 1 楼 AfterSeptember 的回复:
甲只会开拖拉机,乙只会开挖土机
这个应该像#6那样 在Person里面定义CanDriverList 对应的逻辑应该是 甲目前只会开拖拉机 但是过一段时间 甲又学会了开出租车 变的应该是甲的CanDriverList 再过段时间 甲的出租车驾照又被吊销了 变的应该还是甲的CanDriverList if(person.CanDrive(car)) { Drive(car); }
lm_whales 2013-03-07
  • 打赏
  • 举报
回复
Person { list<int> CanDriverList; Driver(Car& c); if(c.typeid in CanDriverList) C.DriverBy(p.state); int state; enum {drinking,phoning,drinked,normal}; }; class Car {int typeid; DrivedBy( int state){ switch(state){ case drinking: runcurve(); case phoning: runcureawhile(); case drinked: runcurveandjumping(); case normal: runway(); default:runway(); }; }; class CCombine { Person p; Car c; bool CanDrived(); void Driver(); { p.Driver(c); }; };
漫步者、 2013-03-01
  • 打赏
  • 举报
回复
两者都要......
未注销 2013-03-01
  • 打赏
  • 举报
回复
其实这完全是两个不同的实现。 一,如果只有(1),那就是人能开车,能开任意一辆车,void candrive(Car car); 开什么样的车由参数决定。 二,(1)(2)都有的话,人不仅能开车,而且车还要选择人,void canbedrived(People people); 比如这车是拖拉机和挖土机,甲只会开拖拉机,乙只会开挖土机,(2)存在的意义就在这里。
kaiseer8828 2013-03-01
  • 打赏
  • 举报
回复
引用 4 楼 supermegaboy 的回复:
你两个类设计得有问题,drive并不是People的方法,而是car的方法,把people中的drive方法去掉,在people中关联一个car指针(不应用包含)这样就行了。
大神能详细点吗, 求个例子:就把我的代码改改我看看,说的有点抽象。。。
飞天御剑流 2013-03-01
  • 打赏
  • 举报
回复
你两个类设计得有问题,drive并不是People的方法,而是car的方法,把people中的drive方法去掉,在people中关联一个car指针(不应用包含)这样就行了。
palm008 2013-03-01
  • 打赏
  • 举报
回复
这个是业务问题,和语言本身无关。语言就如橡皮泥,看你要捏成什么样子。

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧