国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C++操作符重載的變態用途之子類轉換

2019-11-17 05:13:21
字體:
來源:轉載
供稿:網友

  假如類的成員變量是特定類和自定義結構,使用該類名或結構作為操作符進行重載。(當然是基本類型也可以,不過實用性不強,只會降低代碼可讀性。)

  如下,一個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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汨罗市| 吉木乃县| 花莲县| 延吉市| 乳源| 文昌市| 石台县| 莎车县| 威远县| 义乌市| 汕头市| 封丘县| 灵宝市| 江都市| 遂昌县| 衡南县| 溧阳市| 康保县| 得荣县| 淳安县| 广州市| 荔波县| 子长县| 南康市| 共和县| 溧阳市| 东阳市| 抚州市| 衡阳县| 汪清县| 红河县| 东莞市| 浠水县| 南投县| 融水| 沂南县| 南木林县| 临桂县| 武义县| 青田县| 东海县|