系列链接: CPP语法(一)——数组/字符串
系列链接: CPP语法(二)——指针
系列链接: CPP语法 (三)——结构体/共用体
CPP语法 三——结构体/共用体
一、 结构体
结构体是多个不同类型的数据组成,而数组是由相同类型元素组成的数据集合。
1.1 定义、声明方式:
//方式一 ,先定义后声明
//定义
struct PersonInfo
{
int index;
char name[30];
short age;
};
//声明
PersonInfo pInfo;
//方式二 ,定义的同时声明,可以声明多个变量
struct PersonInfo
{
int index;
char name[30];
short age;
} pInfo;
struct PersonInfo
{
int index;
char name[30];
short age;
} pInfo1,pInfo2;
//方式三 ,声明时就赋值
struct PersonInfo
{
int index;
char name[30];
short age;
} pInfo = {10,"张三", 3};
//还可以声明结构体指针变量
struct PersonInfo
{
int index;
char name[30];
short age;
}* pInfo;
pInfo -> index = 10;
pInfo -> name = "张三";
pInfo -> age = 20;
1.2 结构体成员及初始化
如果是结构体,那么用 . 初始化, 如果是结构体变量,那么用 -> 初始化。
1.3 重命名数据类型
typedef int flag; //给int数据类型起别名
flag a; //这样flag就可以作为int类型来使用
//给类起别名,这样类拥有两个别名
typedef class course{
成员列表
}myCourse,CourseA;
//typedef主要用途如下
//1. 代替很复杂的基本类型名称,如函数指针 int (*)(int i)
// 用pFun代替函数指针
typedef int (*)(int i) pFun;
//2. 使用其他人开发的类型时,使它的类型名符合自己的代码习惯
typedef 关键字具有作用域,范围时别名声明所在的区域 (包含名称空间)
名称空间的类被包含进来后,可以直接使用
别名仍需要使用名字空间
案例:
#include <iostream>
#include <string>
using namespace std;
namespace pet
{
typedef string kind;
typedef string petname;
typedef string voice;
typedef class dog
{
private:
kind m_kindName; //宠物狗种类
protected: //假如有别需要子类继承,则不需要使用种类这个属性。
petname m_dogName;
int m_age;
voice m_voice;
void setVoice(kind name);
public:
dog(kind name);
void sound();
void setName(petname name);
}Dog,DOG; //声明了别名,用Dog,DOG代替类dog
void dog::setVoice(kind name)
{
if(name == "北京犬")
{
m_voice = "嗷嗷";
}
else if(name == "狼犬")
{
m_voice = "呜嗷";
}
else if(name == "黄丹犬")
{
m_voice = "喔嗷";
}
}
dog::dog(kind name)
{
m_kindName = name;
m_dogName = name;
setVoice(name);
}
void dog::sound()
{
cout<<m_dogName<<"发出"<<m_voice<<"的叫声"<<endl;
}
void dog::setName(petname name)
{
m_dogName = name;
}
}
using pet::dog; //使用pet空间的宠物犬dog类
using pet::DOG;
int main()
{
dog a = dog("北京犬"); //名称空间的类被包含进来后,可以直接使用
pet::Dog b = pet::Dog("狼犬"); //别名仍需要使用名字空间
pet::DOG c = pet::DOG("黄丹犬");
a.setName("小白");
c.setName("阿黄");
a.sound();
b.sound();
c.sound();
return 0;
}
二、 共用体
共用体就是将不同的数据项组织为一个整体,和结构体的区别在于,结构体的内存空间大小大于等于所有类型总和,而共用体的内存空间大小是共用体内部所有类型中最大的那一个。
当公用体内一个变量赋值后,将上一个变量清空,占用上一个变量的空间。
共用体的定义声明和结构体类似。
union myUnion
{
int i;
char ch;
float f;
}; //定义
myUnion u; //声明
注意,不能引用共用体变量,可以引用共用体变量中的成员
不能在共用体定义时进行初始化
案例:
#include "stdio.h"
#include <string.h>
/*声明公交车结构体类型*/
struct bus
{
char name[64];
};
/* 声明地铁结构体类型*/
struct plane
{
char name[64];
};
/*声明共用体类型*/
union Transportation
{
struct bus p;
struct plane c;
};
int main()
{
union Transportation t; /*定义一个共用体*/
strcpy(t.p.name, "地铁"); /*将相应的名字复制给相应的变量*/
strcpy(t.c.name, "公交车");
printf("员工选择%s\n",t.p.name); /*输出信息*/
printf("员工选择%s\n",t.c.name);
return 0;
}
系列链接: CPP语法(一)——数组/字符串
系列链接: CPP语法(二)——指针
系列链接: CPP语法 (三)——结构体/共用体