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语法 (三)——结构体/共用体

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值