结构体
c++的结构体和c语言差不多
#include<iostream>
struct inflatable{
char name[20];
float colume;
double price;
};
int main(){
using namespace std;
inflatable guest=
{
"Glorious Gloria",
1.88,
29.99
};
inflatable pal=
{
"写个中国字",
3.12,
32.99
};
cout<<"介绍你的顾客清单"<<guest.name;
cout<<"以及"<<pal.name<<"\n";
cout<<"你一共可以获得¥"<<guest.price+pal.price<<"\n";
return 0;
}
在结构体变量被定义好以后,再次声明时可以省略strcut,同时也可以用句点调用里面的成员。
在函数中给结构体变量赋值时不用写里面的数据类型,直接填写内容并用逗号隔开即可。
另外,结构体里面是可以放string的
相同结构体类型之间可以互相赋值
inflatable bouquet =
{
"sunflowers",
0.20,
12.49
};
inflatable choice;
cout<<"鲜花"<<bouquet.name<<"多少钱";
cout<<bouquet.price<<endl;
choice = bouquet;
cout<<"选择"<<choice.name<<"多少钱"<<choice.price<<endl;
return 0;
同时变量名可以直接放在结构体类型定义的下方,甚至可以直接进行赋值。
struct perks
{
int key_number;
char car[12];
}my_glitz={
7,
"packard"
};
结构数组
定义结构数组和其他数组一样,在括号里用花括号套娃就好了。调用的时候可以用中括号标明位置再调用成员就好了
inflatable guests[2] =
{
{"Bambi",0.5,21.99},
{"Godzilla",2000,565.99}
};
cout<<"The guests"<<guests[0].name<<" and "<<guests[1].name
<<"\n他们的总量是"<<guests[0].colume+guests[1].colume;
return 0;
另外一个小知识点就是,定义的时候成员后面加个冒号可以指定位数,比如unsigned int sn:4
共用体
共用体的定义和结构体比较类似
union one4all
{
int int_val;
long long_val;
double doublie_val;
}
但是共用体变量一次只能存储一个值,自动保留最大的成员。
枚举变量
(由于书上内容较少,在菜鸟里找了一些做补充)
枚举变量的定义方法
enum spectrum {red,orange yellow,green,blue,violet,indigo,ultraviolet};
枚举常量只能以标识符形式表示,而不能是整型、字符型等文字常量。例如,以下定义非法:
enum letter_set {'a','d','F','s','T'}; //枚举常量不能是字符常量
enum year_set{2000,2001,2002,2003,2004,2005}; //枚举常量不能是整型常量
spectrum作为枚举变量的名称,里面的元素red,orange等会形成代表0到7的符号常量
也叫做枚举量
假如说我现在又要定义一个新的枚举量spectrum band;
那么里面的元素如果需要赋值,只能附变量里有的枚举量
band = blue;//正确
band = 2000l;//错误
枚举变量只有赋值运算符而没有加减运算符,也就是不能加减乘除自加自减
如果一定要进行加减,需要进行强制类型转换为int不过如果这样就不能再赋值给枚举变量
如果打算只使用枚举里的常量,也可以不给枚举变量起名字
直接enum {xxxx};
我们也可以自己设置枚举变量里面各元素的值例如
enum spectrum {red=1,orange=2 yellow,green,blue,violet,indigo,ultraviolet};
枚举变量只能参与赋值和关系运算以及输出操作,参与运算时用其本身的整数值。例如,设有定义:
enum color_set1 {RED, BLUE, WHITE, BLACK} color1, color2;
enum color_set2 { GREEN, RED, YELLOW, WHITE} color3, color4;
允许进行以下的操作
color3=RED; //将枚举常量值赋给枚举变量
color4=color3; //相同类型的枚举变量赋值,color4的值为RED
int i=color3; //将枚举变量赋给整型变量,i的值为1
int j=GREEN; //将枚举常量赋给整型变量,j的值为0
最终有一个示例:
口袋中有红、黄、蓝、白、黑五种颜色的球若干个,每次从口袋中取三个不同颜色的球,统计并输出所有的取法。
分析:由于球只能是五种颜色之一,故可用枚举类型表示球的颜色。设取出的球为i、j、k,根据题意,i、j、k分别可以有五种取值,且i≠j≠k。可以用穷举法,逐个检验每一种可能的组合,从中找出符合要求的组合并输出。
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
enum color_set {red,yellow,blue,white,black}; //声明枚举类型color
color_set color;
int i,j,k,counter=0,loop; //counter是累计不同颜色的组合数
for(i=red;i<=black;i++) {
for(j=red;j<=black;j++) {
if(i!=j){ //前两个球颜色不同
for(k=red;k<=black;k++)
if(k!=i&&k!=j){ //第三个球不同于前两个,满足要求
counter++;
if((counter)%22==0){ //每屏显示22行
cout<<"请按回车键继续";
cin.get();
}
cout<<setw(15)<<counter;
/*下面输出每种取法,一行为一种取法的三个颜色*/
for(loop=1;loop<=3;loop++){
switch(loop){
case 1: color=(color_set) i; break; //第一个是i
case 2: color=(color_set) j; break; //第二个是j
case 3: color=(color_set) k; break; //第三个是k
}
switch(color){
case red: cout<<setw(15)<<"red"; break;
case yellow:cout<<setw(15)<<"yellow";break;
case blue: cout<<setw(15)<<"blue"; break;
case white: cout<<setw(15)<<"white"; break;
case black: cout<<setw(15)<<"black"; break;
}
}
cout<<endl; //输出一种取法后换行
}
}
}
}
cout<<"共有:"<<counter<<"种取法"<<endl;
return 0;
}