清华大学C++课程学习笔记——第四章 类和对象(2)结构体、联合体、枚举类

(一)结构体

1.概念辨析:

结构体是一种特殊形态的类,
与类的区别是:类的缺省访问权限是private;结构体的访问权限是public。
(缺省访问权限,默认访问权限)

2.定义

  • 定义主要用来保存数据,而没有操作类型(查询为主)
  • 习惯将结构体数据设为公有,使用结构体更方便
    主要是为了同C语言兼容
//结构体的定义
struct 结构体名称{
	公有成员//紧跟着大括号之后的成员默认为公有成员
protected:
	保护型成员
private:
	私有成员
};

3.结构体的初始化

  • 一个结构体的全部数据成员都是公又成员
  • 没有用户定义的构造函数
  • 没有基类和虚函数(第7章)
类型名 变量名 = {成员数据1初值,成员数据2初值}

举例:(出现的小bug,C++的单引号)
单引号是char类型,双引号是字符串类型,
单个符号使用双引号时,代码会提示”操作数类型不兼容“(“char” 和 “const char*”)

# include <iostream>
# include <string>
using namespace std;

struct Student
{//不写访问控制属性,默认为public属性
    int num;
    string name;
    char sex;
    int age;
};

int main(){
    Student stu = {97001,"Lilin",'F',19};
    cout<<"Num:"<<stu.num<<endl;//使用方式;结构体.成员名
    cout<<"Num:"<<stu.name<<endl;
    cout<<"Num:"<<stu.sex<<endl;
    cout<<"Num:"<<stu.age<<endl;
    return 0;
}

(二)联合体

1.概念辨析:

相比于类和结构体,最大的区别就是存储空间的共用,优点是避免冗余

  • 任何两个成员不会同时有效
  • 成员共用一组内存单元
    【牛客网经常考察结构体联合体所占存储空间大小】
    eg:成绩联合体
# include<string>
# include<iostream>
using namespace std;

class ExamInfo{
private:
    string name;
    enum{GRADE, PASS, PERCENTAGE}mode;
    union{
        char grade;
        bool pass;
        int percent;
    };
public:
//需要三种构造函数,分别用等级、是否通过和百分初始化
    ExamInfo(string name, char grade)
        :name (name),mode(GRADE),grade(grade){}
    ExamInfo(string name, bool pass)
        :name (name),mode(PASS),pass(pass){}
    ExamInfo(string name, int percent)
        :name (name),mode(PERCENTAGE),percent(percent){}
    void show();

};
void ExamInfo::show(){
    //三种显示模式
    cout<<name<<":";
    switch (mode)
    {
    case GRADE:
        cout<<grade;
        break;
    case PASS:
        cout<<(pass?"PASS":"FAIL");
        break;
    case PERCENTAGE:
        cout<<percent;
        break;
        
    default:
        break;
    }
    cout<<endl;
}
int main(){
    ExamInfo course1("English",'B');
    ExamInfo course2("Math",true);
    ExamInfo course3("Chinese",85);
    course1.show();
    course2.show();
    course3.show();
    return 0;
}

2.联合体的定义

union 联合体名称{//与结构体一致
	公有成员
protected:
	保护型成员
private:
	私有成员
};

(三)枚举类

1.概念辨析

枚举类型:可以自动隐含转换为整数类型(类型定义不是很严格,整数类型的一个子集)
优点:

  • 作用域强制限制在枚举类中(无法比较不同类的枚举对象)
  • 转换限制(禁止将类型隐含的转换为整数)
  • 指定底层类型(定义范围更加丰富)

2.枚举类定义

enum class 枚举类型名:底层类型{枚举值列表}
//默认的底层类型就是int类型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值