VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 940|回复: 3

一个类的类成员怎么限定取值,又怎么在实例化的时候传参呢?

[复制链接]
51_avatar_middle
最佳答案
0 
online_vip 发表于 2016-6-27 23:46:35 | 显示全部楼层 |阅读模式
300驿站币
本帖最后由 168haoyu 于 2016-6-28 11:09 编辑

最近遇到一个小问题,请教一下大神们。
我在写一个Patient类(病人)的时候,有个类成员Sex(性别),性别只能限定只能取值MALE(男性)或者FEMALE(女性).要怎么设计这个类呢?我的想法是用enum来定义,但是,
在我重载了一个构造函数,希望传递性别过去构造出Patient类的实例,参数这块不懂怎么传,不懂是什么类型,怎么写?貌似Java的可以限定传递的参数的类型,好像是使用尖括号<>
但是C++的配合枚举就不懂了。希望大神能给点建议,获取其他一些更好的方案。

一个类的类成员怎么限定取值,又怎么在实例化的时候传参呢? 一个类的类成员怎么限定取值,又怎么在实例化的时候传参呢?
代码如下:
.h

  1. #pragma once
  2. #include "afx.h"


  3. //////////////////////////////////////////////////////////////////////////
  4. //定义一些枚举

  5. //性别
  6. enum Sexuality{MALE,FEMALE};



  7. class CPatient :
  8.         public CObject
  9. {
  10. public:
  11.         CPatient(void);
  12.         CPatient(CString strName, strSex,UINT age);
  13.         ~CPatient(void);
  14. public:
  15.         //序号
  16.         int index;
  17.         //名字
  18.         CString strName;
  19.         //性别
  20.         Sexuality Sex;
  21.         //年龄
  22.         UINT age;
  23. };
复制代码


.cpp

  1. #include "StdAfx.h"
  2. #include "Patient.h"


  3. CPatient::CPatient(void)
  4. {       
  5. }

  6. CPatient::CPatient(CString strName,CString strSex,UINT age)
  7. {
  8.         this->strName = strName;
  9.         //this->Sex = strSex;
  10.         this->age =age;
  11. }


  12. CPatient::~CPatient(void)
  13. {
  14. }
复制代码


代码不多,就是要定义一个成员,这个成员可以限定只能取值为指定的两个值。其他的不能即可。最好是用枚举的。





上一篇:求助编写MFC计算器的进制转换功能
下一篇:二级下拉菜单,当一级下拉菜单多次选中时,二级下拉菜单会多次重复添加
74_avatar_middle
最佳答案
0 
在线会员 发表于 2016-6-28 15:24:09 | 显示全部楼层
只有兩個值的話 你可以將sex定義為 bool
如果不用 bool 或者 有多個可能的值 你可以在構造函數中 驗證下 傳入參數是否 是期望的 如果不是 就 throw 拋出異常
10_avatar_middle
最佳答案
3 
在线会员 发表于 2016-7-2 13:46:40 | 显示全部楼层
  1. enum Sexuality { MALE, FEMALE };
  2. class CPatient
  3. {
  4. public:
  5.         CPatient(void);
  6.         CPatient(CString strName, Sexuality Sex, UINT age);
  7.         ~CPatient(void);
  8. public:
  9.         //序号
  10.         int index;
  11.         //名字
  12.         CString strName;
  13.         //性别
  14.         Sexuality Sex;
  15.         //年龄
  16.         UINT age;
  17. };[code]CPatient::CPatient(void)
  18. {
  19. }

  20. CPatient::CPatient(CString strName, Sexuality strSex, UINT age)
  21. {
  22.         this->strName = strName;
  23.         this->Sex = strSex;
  24.         this->age = age;
  25. }


  26. CPatient::~CPatient(void)
  27. {
  28. }
复制代码
[/code]
10_avatar_middle
最佳答案
3 
在线会员 发表于 2016-7-2 13:55:40 | 显示全部楼层
不好意思,第一次发代码没弄好。请把第17行的[code]去掉再回车换行。
还有C++中如果不使用MFC或者CArchive,最好不要从CObject 继承,没任何作用反而是个累赘。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-10-30 14:58

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表