C++11强类型枚举,友元函数重载输出运算符ostream
使用C++ 11 强类型枚举enum class 定义Boy对象的职业枚举 JobType
C++标准的枚举类型被认为是不安全的,其枚举类型被视为整数。不同的枚举类型之间 枚举值可以进行比较。
定义友元重载<<运算符
friend std::ostream& operator<<(std::ostream& os,const Boy& boy);
Boy.h
#pragma once #include <string> #include <iostream> //C++ 强类型枚举 enum class JobType{ IT, DBS }; class Boy { public: Boy(std:string name="未知", int age=0, JobType job = JobType::IT); ~Boy(void); friend std::ostream& operator<<(std::ostream& os,const Boy& boy); public: std::string name; int age; JobType job; } std::ostream& operator<<(std::ostream& os,const Boy& boy);
以上便是Boy类的.h文件了,我们目标是通过有原函数输出 Boy类对象的 名字 年龄 职业的相关信息。
Boy.ccp
#include "Boy.h" //Boy::Boy(std:string name="未知", int age=0, JobType job = JobType::IT)//这种写法相信大家都应该知道会编译失败:重定义 Boy::Boy(std:string name, int age, JobType job) { this->name = name; this->age = age; this->job = job; } std::ostream& operator<<(std::ostream& os,const Boy& boy) { os<<"name: "<<boy.name<<" age: "<<boy.age<<" job: "; switch(boy.job) { case JobType::IT: os<<"计算机IT"; break; case JobType::DBS: os<<"数据库管理员"; break; default: os<<"未知"; break; } return os; } Boy::~Boy(void) {}
到这里代码就结束了,再写个main测试一下
main.cpp
#include <iostream> #include "Boy.h" int main(void) { const Boy boy("张三",27,JobType::DBS); std::cout<<boy<<std::endl; system("pause"); return 0; }
所有代码结束:
name: 张三 age: 27 job: 数据库管理员
留言评论
暂无留言