• C++中的自定义数据类型(结构体)解析


    自定义数据类型

    一、结构体类型

    1、   C++允许用户自己定义一组包含若干个类型不同(或相同)的数据项的数据类型,称为结构体。

    2、   声明符号:struct

    3、   一般形式:struct 结构体类型名{成员表列};

    4、   结构体类型名用来作结构体类型的标志。

    5、   结构体中的每个成员也称为结构体中的一个域。成员表列又称为域表。

    6、   声明结构体类型的位置一般在文件的开头,在所有函数之前。

    7、   C++提供了类类型,所以在一般情况下,不必使用带函数的结构体。

    二、结构体类型变量的定义方法及其初始化

    1、   定义结构体类型变量的方法:

    a) 先声明结构体类型再定义变量名

    结构体类型名     结构体变量

     Student            student1;

    C语言中结构体类型名前面加上关键字struct

    C++中可以省略

    Student1中具有Student中同样的属性

    b) 在声明类型的同时定义变量

    一般形式:

    struct 结构体名

         成员表列

        }变量名表列;

    c)  直接定义结构体类型变量

    一般形式:

    struct           //没有结构体类型名

     {

         成员表列

      }变量名表列;    

                    这种方式虽然合法,但很少使用。提倡先定义类型后定义变量的第一种方法.

    说明:

    1、   不是所有的结构体类型都有相同的结构。

    2、   类型与变量是不同的概念,只能对结构体变量中的成员赋值,不能对结构体类型赋值。在编译时,不会对类型分配空间,只为变量分配空间。

    3、   结构体中的成员可以单独使用,它的作用与地位相当于普通变量。

    4、   成员也可以是一个结构体变量。

    5、  #include

    6、  usingnamespace std;

    7、   

    8、  struct Date   //声明一个结构体类型Date

    9、  {

    10、   int month;

    11、   int day;

    12、   int year;

    13、 };

    14、 struct Student  //声明一个结构体类型Student

    15、 {

    16、   int num;

    17、   char name[20];

    18、   char sex;

    19、   int age;

    20、   Datebirthday;  //Date是结构体类型,birthday是Date类型的成员

    21、   char addr[30];

    22、 }student1={},student2;//定义student1和student2为结构体类型Student的变量

    首先声明了一个Date类型,具有三个成员month,day,year。然后声明Student类型,将成员birthday指定为Date类型,即birthday作为Date结构体类型名的结构体变量,具有month,day,year三个属性。

    5、结构体中的成员名可以与程序中的变量名相同,但二者没有关系,互不影响。

    三、结构体变量的引用

    1、可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量。

        Student1=Student2;

    2、   可以引用一个结构体变量中的一个成员的值。

    Student1.num=1000;

    3、   如果成员本身也是一个结构体类型,则要用若干个成员运算符,一级一级找到最低一级的成员。

    例如;student1.birthday.month(引用结构体student1中的birthday中的month成员)

    4、   不能将一个结构体变量作为一个整体进行输入和输出。

    不能:cout<

    5、   对结构体变量的成员可以像普通变量一样进行各种运算。

    例如:student2.score=student1.score;

    sum=student1.score+student2.score;

    student1.age++;

    ++student1.age

    6、   可以引用结构体变量成员的地址,也可以引用结构体变量的地址。

    例如;cout<<&student1;  //输出student1的首地址

    cout<<&student1.age;//输出student1.age的地址

    结构体变量的地址主要用作函数参数,将结构体变量的地址传递给形参。

    三、结构体数组

    1、   结构体数组和其他数值型数组的不同之处在于:每个数组元素都是一个结构体类型的数组,他们都分别包含各个成员项。

    2、   结构体数组就是用数组的形式保存复制多个结构体变量,不用在定义结构体后声明无数的变量实体。

    3、   关于初始化:在声明结构体数组的时候可以对其进行初始化,数据类型必须对应,和普通数组初始化的模式一样,不确定数组长度的时候可以不写数组长度直接声明初始化。

    四、结构体数组应用

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

    解析:这个题可以定义一个候选人结构体数组,包含3个元素,在每个元素中存放有关的数据。

    实现程序如下:

    /*

     * newtest.cpp

     *

     *  Created on: 2012-4-8

     *      Author: David

     */

    #include 

    /*

     * 声明结构体类型Person

     * 拥有name数组和count整型变量

     * */

    struct Person   

    {

    char name[20];

    int count;

    };

    int main()

    {

    //定义Person类型的数组,内容为三个候选人的姓名和当前的票数

    Person leader[3]={"li",0,"zhang",0,"fun",0};

    int i,j;

    char leader_name[20]; //leader_name为投票人所选的人的姓名

    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<

    for(i=0;i<3;i++)

    {

    cout<

    }

    return 0;

    }

    }

  • 相关阅读:
    Java dom4j操作xml文件的方法大全
    各省份12.5m地形数据
    MySQL中的分组函数和分组查询
    java锁之ReentrantLock及Condition
    [math]判断线段是否相交及夹角
    LangChain 摘要 和问答示例
    linux指令总结
    Vue常见面试题 - 03
    Vue3中defineEmits、defineProps 是怎么做到不用引入就能直接用的
    R语言获取data.table数据中指定数据列的最小值所在的数据行(minimum)
  • 原文地址:https://blog.csdn.net/delphigbg/article/details/127840950