c++2017-6-22结构、联合与枚举
#include <iostream>
using namespace std;
struct Address{
const char* name;
int number;
const char* street;
const char* town;
char state[2];
const char* zip;
};
//不同的结构体布局,会影响结构体的内存容量
struct Readout1{
char hour;
int value;
char seq;
};
//不同的结构体布局,会影响结构体的内存容量
struct Readout2{
int value;
char hour;
char seq;
};
//struct指针解引用 ->
void print_addr(Address* p){
cout << p->name << '\n'
<< p->number << ' ' << p->street << '\n'
<< p->town << '\n'
<< p->state[0] << p->state[1] << ' ' << p->zip << '\n';
}
//引用的方式传递struct,使用.运算符
void print_addr1(Address& r){
cout << r.name << '\n'
<< r.number << ' ' << r.street << '\n'
<< r.town << '\n'
<< r.state[0] << r.state[1] << ' ' << r.zip << '\n';
}
void main(){
Address jd = {
"Jim Dandy", 61, "South St",
"New Providence", { 'N', 'J' }, "07974"
};
cout << sizeof(Readout1) << '\n';
cout << sizeof(Readout2) << '\n';
//print_addr(&jd);
//print_addr1(jd);
}
结构与数组-----标准库array--------------多研究MSDN(原因是那里面是具体的规则)------指定的条目,然后按F1
联合
union是一种特殊的struct,使用union的目的无非是让数据更紧密,从而提高程序的性能,但使用union的代码更容易出错,因此最好不要使用union在你的代码中。
枚举
#include <iostream>
using namespace std;
#include <array>
#include <initializer_list>
struct Address{
const char* name;
int number;
const char* street;
const char* town;
char state[2];
const char* zip;
};
struct Readout1{
char hour;
int value;
char seq;
};
struct Readout2{
int value;
char hour;
char seq;
};
struct Point{
int x, y;
//Point(int x, int y); //构造函数
//Point(int x, int y){};
};
//struct Array{ //[Array]struct包含数组,而且这个数组是[Point]struct的数组
// Point elem[3];
//};
//struct指针解引用 ->
void print_addr(Address* p){
cout << p->name << '\n'
<< p->number << ' ' << p->street << '\n'
<< p->town << '\n'
<< p->state[0] << p->state[1] << ' ' << p->zip << '\n';
}
//引用的方式传递struct,使用.运算符
void print_addr1(Address& r){
cout << r.name << '\n'
<< r.number << ' ' << r.street << '\n'
<< r.town << '\n'
<< r.state[0] << r.state[1] << ' ' << r.zip << '\n';
}
//enum class枚举类型
enum class Person{
Chinese,American,English
};
void main(){
Address jd = {
"Jim Dandy", 61, "South St",
"New Providence", { 'N', 'J' }, "07974"
};
/*cout << sizeof(Readout1) << '\n';
cout << sizeof(Readout2) << '\n';*/
//print_addr(&jd);
//print_addr1(jd);
Point points[3]{{1,2}, {3,4}, {5,6}}; //[Point]struct的数组声明及定义
int x2 = points[2].x;
cout << x2 << '\n';
//Array points2{{1,2},{3,4},{5,6}};-------这是个问题,不要陷入细节
//int y2 = points2.elem[3].y;
//cout << y2 << '\n';
//用上面的时候出现问题,接下来我们就用标准库中的array进行工作
using Array = array<Point, 3>; //这里需要#include <array>,包含3个Point类型的array
//initializer_list<Array> points2{ { 1, 2 }, { 3, 4 }, { 5, 6 } };
Array points2;
//{ { 1, 2 }, { 3, 4 }, { 5, 6 } };
points2[0] = { 1, 2 };
points2[1] = { 3, 4 };
points2[2] = { 5, 6 };
Person per = Person::American;
switch (per){
case Person::Chinese:
cout << "中国人" << endl;
break;
case Person::American:
cout << "美国人" << endl;
break;
case Person::English:
cout << "英国人" << endl;
break;
default:
break;
}
}