[原创] C++操作符重载的变态用途--特征聚焦的子类转换

原创 2005年03月03日 10:33:00

嘿嘿,如果类的成员变量是特定类和自定义结构,使用该类名或结构作为操作符进行重载。

(当然是基本类型也可以,不过实用性不强,只会降低代码可读性。)

如下,一个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++ Primer学习笔记——$14 操作符重载、函数对象及类类型转换

题记:本系列学习笔记(C++ Primer学习笔记)主要目的是讨论一些容易被大家忽略或者容易形成错误认识的内容。只适合于有了一定的C++基础的读者(至少学完一本C++教程)。  作者: tyc611,...
  • whycold
  • whycold
  • 2011年01月19日 15:09
  • 734

C++ 操作符重载

  • 2013年05月30日 01:47
  • 1KB
  • 下载

C++:运算符重载、string类重写、数据类型转换、->操作符重载、virtual继承、virtual函数、typeid

1.运算符重载 谁调用了成员函数,谁就是当前对象。在C++中运算符操作就是函数。含有const或者引用成员变量时,构造函数要人为的初始化。Int i=9; cout>代码如下:istream &...

C++操作符重载

  • 2012年11月18日 21:03
  • 1.98MB
  • 下载

c++课件之操作符重载

  • 2014年10月17日 17:51
  • 612KB
  • 下载

c++实现日期类(class Date) 构造函数 拷贝构造 操作符重载(输入输出 比较操作 算数运算 自增自减)

c++实现日期类(class Date) 构造函数 拷贝构造 操作符重载(输入输出 比较操作 算数运算 自增自减)...

C++操作符重载专题

  • 2011年04月13日 21:21
  • 181KB
  • 下载

C++编写的操作符重载实例

  • 2008年11月16日 11:01
  • 596B
  • 下载

【C++】操作符重载及实现简单的复数类Complex

操作符重载: 重载操作符是具有特殊函数名的函数,关键字operator后面接需要定义的操作符符号。 操作符重载也是一个函数,具有返回值和形参表。它的形参数目与操作符的操作数目相同。 函数调用操作符可以...

c++类的操作符重载

以下是自己学习c++类的操作符重载自己写的string类#include #include using namespace std; //字符串类编写 class mystring { publi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[原创] C++操作符重载的变态用途--特征聚焦的子类转换
举报原因:
原因补充:

(最多只允许输入30个字)