【ThinkingInC++】37、更安全的union可以封装在一个类中

/**
* 书本:【ThinkingInC++】
* 功能:更安全的union可以封装在一个类中
* 时间:2014年9月6日14:53:04
* 作者:cutter_point
*/

#include<iostream>

using namespace std;

class SuperVar
{
    //enum没有类型名(他是一个没有加标记的枚举),如果想立即定义enum的实例时,
    //这种做法是可取的
    enum {character, integer, floating_point}vartype;
    union
    {
        char c;
        int i;
        float f;
    };
public:
    SuperVar(char ch);
    SuperVar(int ii);
    SuperVar(float ff); //重载
    void print();
};

/*
SuperVar(char ch);
SuperVar(int ii);
SuperVar(float ff); //重载
void print();
*/

//SuperVar(char ch);
SuperVar::SuperVar(char ch)
{
    vartype=character;
    c=ch;
}

//SuperVar(int ii);
SuperVar::SuperVar(int ii)
{
    vartype=integer;
    i=ii;
}

//SuperVar(float ff); //重载
SuperVar::SuperVar(float ff)
{
    vartype=floating_point;
    f=ff;
}

//void print();
void SuperVar::print()
{
    switch(vartype)
    {
    case character:
        cout<<"character: "<<c<<endl;
        break;
    case integer:
        cout<<"integer: "<<i<<endl;
        break;
    case floating_point:
        cout<<"float: "<<f<<endl;
        break;
    }
}

int main()
{
    SuperVar A('c'), B(12), C(1.44f);
    A.print();
    B.print();
    C.print();

    return 0;
}

时间: 2024-11-08 16:30:23

【ThinkingInC++】37、更安全的union可以封装在一个类中的相关文章

【ThinkingInC++】43、内建类型封装在一个类里

内建类型 C++数据类型包括: 1)内置的基本数据类型,如整型.浮点型.布尔型等,均有一个关键字对应,如int,float,bool 2)C++ STL(标准库)引入了一些扩展类型,有时候也归为基本类型,比如字符串类型(string),复数类型(complex),向量(vector)等. 3)其他,即用户自定义类型,也叫抽象数据类型(ADT),即用户通过class,struct,enum定义的各种数据类型. /** * 书本:[ThinkingInC++] * 功能:把一个内建类型封装在一个类里

封装多个集合在一个类中

public class UserData { List<Student> stulist = new List<Student>(); //实例化student类型的集合 public List<Student> Stulist //设置属性读取 { get { return stulist; } set { stulist = value; } } List<Teacher> tealist = new List<Teacher>(); pu

PCL中将回调函数封装到类中

这是类中的声明 private://点云回调函数 NuClearTask_MyPointCloudHandle //点云选择 static void ps_callback(const pcl::visualization::AreaPickingEvent& event, void* object) { NuClearTask *pThisObject = (NuClearTask*)object; pThisObject->PointSelect_callback(event); } v

设计模式-Strategy Strategy将算法封装到类中,通过组合的方式 将具体算法的实现在组合对象中实现

以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //strategy.h #pragma once class Strategy { public: Strategy(); virtual ~Strategy(); virtual void AlgrithmInference() = 0; protected: private: }; class ConcreateStrategyA :public Strategy { public: ConcreateStrateg

第四章:定义封装的类类型

就.NET平台而言,最基本的编程结构就是类类型. 类是由字段数据(通常叫做成员变量)以及操作这个数据的成员(构造函数,熟悉,方法,事件等)所构成的自定义类型. 注:类中的字段很少定义为公共(public)的,为了保护状态数据的完整性,最好将数据定义为私有(private)的或是受保护(protected)的. public class CDome { public int id; private int code; protected int pCode; public CDome(){} pu

封装OpenCL类

以上一篇<OpenCL入门测试>为基础,将函数封装到类中,方便调用. #include <cstdlib> #include <iostream> #include <iomanip> #include <cstring> #include <cassert> #include <windows.h> #define CL_USE_DEPRECATED_OPENCL_1_2_APIS // 定义使用OpenCL 1.2 #

封装业务类

1.什么是业务类? 业务类:专门处理某项业务(事情) 2.业务类的作用? 把一些业务的业务逻辑封装起来,其它类需要处理这些业务的时候,直接调用业务类的方法就可以了 大大减少了其它类中的代码量,让代码看起来更整洁,可读性更好 3.业务类的规范 3.1 在类的上面,注明这个类的功能(作用) 让其它人一看到这个类就知道是干什么用的,减少沟通成本 1 // Created by XT on 16/7/31. 2 // Copyright © 2016年 XT. All rights reserved.

structs2 jsp页面参数封装成类传递到action

中途切入一个系统的维护,而我又是菜鸟. 系统要实现从前端jsp页面输入查询条件,传入后台action进行处理.根据原来的系统本身的代码大概明白是jsp里ognl表达式传参数过去,但是一直不成功.百度各种办法,找到下面方法都试过,好像都不行.找耳挠腮搞半天才发现,我ognl表达式里的值得大小写和action里的类实例名不一致,真是不能更二咯-.- 对齐了jsp里的ognl表达式和action里的类实例名后,问题解决了.把我搜到的structs2 jsp传参数到后台action的方法记录下来,抄一遍

oc学习之封装与类之间的关系

1. 面向对象的特征-封装? 封装: 现实生活中的封装: 将很多的小东西 塞在1个大口袋里面. 好处: a. 对外部屏蔽. b. 方便管理. 代码的封装: 函数/方法 就是1种封装的体现: 将一段代码塞在函数/方法中. 好处: 屏蔽了内部的实现. 便于管理. 类是一种更高级别的封装: 1个类中封装数据的状态和行为. 将数据的状态和行为封装在了1个类中. 类中有很多复杂的实现. 对于外部而言无需关心. 只需要知道这个类是干啥的? 怎么用? 把哪些复杂的东西. 方法,属性.封装成1个类的整体. 2.