zoukankan      html  css  js  c++  java
  • 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便于移植



  • 相关阅读:
    vim
    Linux 软链接和硬链接
    常用命令
    linux 二级目录结构
    关于bash shell的理解
    虚拟机网络模式
    安装虚拟机
    date 命令
    使用3种协议搭建yum仓库
    ubuntu update时发生错误
  • 原文地址:https://www.cnblogs.com/fengdashen/p/3885417.html
Copyright © 2011-2022 走看看