C++程序设计之结构体,共用体,枚举和typedef

【1】结构体的基本功

  注意结构体里面可以有很多东西,可以结构体里面包含结构体

#include<iostream>
using namespace std;
struct Date
{
        int month;
        int day;
        int year;
};

struct Student
{
        int num;
        char name[20];
        char sex;
        Date birthday;
        float score;
}student1,student2= {1002,"wangli",'f',5,23,1982,89.5};

int main()
{
        student1 = student2;
        cout<<student1.num<<endl;
        cout<<student1.name<<endl;
        cout<<student1.sex<<endl;
        cout<<student1.birthday.month<<endl;
        cout <<student1.birthday.year<<endl;
        cout<<student1.score<<endl;
        return 0;
}
View Code

【2】结构体数组的应用

例7.2 对候选人得票的统计程序。设有3个候选人,
最终只能有1人当选为领导。今有10个人参加投
票,从键盘先后输入这10个人所投的候选人的名
字,要求最后输出这3个候选人的得票结果。

#include<iostream>
#include<string.h>
using namespace std;
struct Person
{
        char name[20];
        int count;
};
int main()
{
        Person leader[3] = {"li",0,"zhang",0,"fun",0};
        int i,j;
        char leader_name[20];
        for(i = 0;i<10;i++)
        {
                cin>>leader_name;
                for(j=0;j<3;j++)
                {
                        if(strcmp(leader_name,leader[j].name)==0)
                                leader[j].count++;
                }
                cout<<endl;
        }
        for(i=0;i<3;i++)
        {
                cout<<leader[i].name<<":"<<leader[i].count<<endl;
        }
        return 0;
}
View Code

 

用7.1.7 动态分配和撤销内存的运算符new delete

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

struct Student
{
        string name;
        int num;
        char sex;
};

int main()
{
        Student *p;
        p = new Student;//用new开辟一个存放Student型的数据空间
        p->name = "wang Fun";
        p->num = 10123;
        p->sex = 'm';

        cout<<p->name<<endl<<p->num<<endl<<p->sex<<endl;
        delete p;//撤销该空间
        return 0;
}
View Code

 

 

【3】共用体的几个特点:

  (1) 使用共用体变量的目的是希望用同一个内存段  
  存放几种不同类型的数据。但请注意: 在每一瞬
  时只能存放其中一种,而不是同时存放几种。
  (2) 能够访问的是共用体变量中最后一次被赋值的
  成员,在对一个新的成员赋值后原有的成员就失去
  作用。
  (3) 共用体变量的地址和它的各成员的地址都是同  
  一地址。
  (4) 不能对共用体变量名赋值;不能企图引用变量
  名来得到一个值;不能在定义共用体变量时对它初
  始化;不能用共用体变量名作为函数参数。

  例7.7 设有若干个人员的数据,其中有学生和教师。
  学生的数据中包括: 姓名、号码、性别、职业、
  年级。教师的数据包括: 姓名、号码、性别、职
  业、职务。可以看出,学生和教师所包含的数据是
  不同的。现要求把它们放在同一表格中,见图7.13

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

struct
{
        int num;
        char name[10];
        char sex;
        char job;
        union P
        {
                int grade;
                char position[10];
        }category;

}person[2];

int main()
{
        int i;
        for(i=0;i<2;i++)
        {
                cin>> person[i].num>>person[i].name>>person[i].sex>>person[i].job;
                if(person[i].job == 's')
                        {
                                cin>>person[i].category.grade;
                        }
                else
                        {
                                cin>>person[i].category.position;
                        }
        }

        cout<<endl<<"NO. name sex job grade/person"<<endl;


        for(i =0;i<2;i++)
        {
                if(person[i].job == 's')
                {
                cout<< person[i].num<<setw(6)<<person[i].name<<"  "<<person[i].sex<<"  "<<person[i].job<<setw(10)<<person[i].category.grade<<endl;

                }
 else
                {
                cout<<person[i].num<<setw(6)<<person[i].name<<"  "<<person[i].sex<<"  "<<person[i].job<<setw(10)<<person[i].category.position<<endl;
                }
        }


        return 0;
}
                                                                                                                                      
View Code

 

【4】typedef的使用规则

  (1) typedef
  typedef可以声明各种类型名,但不能用来定义
  typedef变量。用typedef可以声明数组类型、字符串类型,
  使用比较方便。
  (2) 用typedef只是对已经存在的类型增加一个类型
  名,而没有创造新的类型。
  (3) 当在不同源文件中用到同一类型数据(尤其是  
  像数组、指针、结构体、共用体等类型数据)时,
  常用typedef声明一些数据类型,把它们单独放在一
  个头文件中,然后在需要用到它们的文件中用#
  include命令把它们包含进来,以提高编程效率。
  (4) 使用typedef有利于程序的通用与移植。有时程
  序会依赖于硬件特性,用typedef便于移植



posted @ 2014-08-01 17:15  跨七海的风  阅读(355)  评论(0编辑  收藏  举报