工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > C/C++ > 正文
C++操作符重载的变态用途之子类转换
[文章信息]
作者:hellowithsmile
时间:2005-03-05
出处:blog
责任编辑:方舟
[文章导读]
如果类的成员变量是特定类和自定义结构,使用该类名或结构作为操作符进行重载
advertisement
专题教程宝典
【软件应用】
【办公软件】
【图形图像】
【网页制作】
【操作系统】
【网络安全】
【程序开发】
【日报周刊】
【多媒体教程】
· 天极软件应用多媒体教程
· Windows开机关机故障分析及排除
· 图解PS按比例自动批量裁剪照片
· Visual FoxPro9.0构建管理系统图解
· 体验面对面的网络视频通讯
· 对付网页恶意代码
· Word动画教程:表格操作全接触
· JBuilder 2005开发Applet游戏全接触
· WinRAR操作技巧与另类应用
· 用VMware 5实现多系统同时运行
[正文]
  如果类的成员变量是特定类和自定义结构,使用该类名或结构作为操作符进行重载。(当然是基本类型也可以,不过实用性不强,只会降低代码可读性。)

  如下,一个CPerson,强行转换为hand,也可以使用。

  类似于现实,我们只会对某个实物的具体特征表示强烈的兴趣,也就是特征聚焦的意思。如HR部门只会关注一个应聘者的skill。

  当然在实际用途中,过度使用这种子类转换,只会降低代码可读性。

  另外如类中有多个同类型的成员,这样的转换让人莫名其妙。

  实例代码:

// Person.h: interface for the CPerson class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PERSON_H__A825C71F_CB10_4997_8F9C_DBE792C5C387__INCLUDED_)
#define AFX_PERSON_H__A825C71F_CB10_4997_8F9C_DBE792C5C387__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

typedef struct tag_hand
{
 bool bSix;
 bool bLefty;
} hand;

class CSkill
{
 public:
  CSkill():strDesc(NULL){}
  virtual ~CSkill(){}

 public:
  char *strDesc;
};

class CPerson
{
 public:
  CPerson();
  virtual ~CPerson();

  hand m_hand;
  CSkill m_skill;

  operator hand() const;
  operator CSkill() const;
 
  static void Test();
};

#endif // !defined(AFX_PERSON_H__A825C71F_CB10_4997_8F9C_DBE792C5C387__INCLUDED_)

// Person.cpp: implementation of the CPerson class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Person.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CPerson::CPerson()
{}

CPerson::~CPerson()
{}

CPerson::operator hand() const
{
 return m_hand;
}

CPerson::operator CSkill() const
{
 return m_skill;
}

void CPerson::Test()
{
 CPerson person;
 person.m_hand.bSix = false;
 person.m_hand.bLefty = true;

 person.m_skill.strDesc = new char[1024];
 strcpy( person.m_skill.strDesc, "Good at programming..." );

 printf( "%d, %d\n", ((hand)person).bSix, ((hand)person).bLefty );
 printf( "%s\n", ((CSkill)person).strDesc );

 delete[] person.m_skill.strDesc;
 return;
}

int main(int argc, char* argv[])
{
 CPerson::Test();
 return 0;
}

  输出:

  0, 1
  Good at programming...
  Press any key to continue

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • C++中建立对象间消息连接的系统方法
  • 谈跨平台C++动态连接库的实现
  • 在C++中创建并使用Web服务
  • 利用C++模板编写的序列化框架
  • C语言高效编程的的四大绝招
  • 京东方MBO方案获批 结盟日本丸红惊险一跳
  • 海尔4年半走完借壳上市路 迈上国际资本平台
  • 黄宏生的律师被港廉署起诉 涉嫌妨碍司法公正
  • IBM笔记本强力反击 警告戴尔惠普看好客户
  • 周鸿祎面对传言心情复杂 称雅虎成熟就离开
  • 马志平回应被拘传言 称不担任上市公司职务
  • 3G抬高电信运营商地位 手机产业链酝酿革命
  • 新联想发联名信稳客户 ThinkPad标识继续沿用
  • Advertisement

    天极无线


    奇妙科幻|美好风光|清风车影|漫画卡通|星座生肖|明星写真|动物世界
    老鼠爱大米
    挥着翅膀的女孩
    女人味
    栀子花开
    白月光
    刚刚好
    江南
    快乐崇拜
    亲爱的你怎么不在我身边
    小薇
    2002年的第一场雪
    有多少爱可以重来
    我的地盘
    七里香
    情人
     
    老鼠爱大米 老板电话
    冲动的惩罚 七里香
    我不是黄蓉 女生撒娇
    盛夏的果实 坚持到底
    孤单北半球 眉飞色舞
    挪威的森林 可爱女人
    最浪漫的事 老板电话

    CSEEK搜索