C++菜鸟学习笔记系列(5)——自定义数据结构

简介: C++菜鸟学习笔记系列(5)——自定义数据结构

C++菜鸟学习笔记系列(5)

本期主题:自定义数据结构

我们在前面的几篇博客中已经叙述过C++中的一些关于数据类型的知识,包括基本数据类型(整型数、浮点数、字符、布尔型等)还有复合类型(引用、指针)。


这些都属于C++内置类型,其实我们在日常的使用过程中这些已经能够基本满足我们的需要,但是在很多时候我们只靠这些内置类型非常麻烦,例如我们想要写一个关于学生管理系统的程序,那么我们来考虑一下,这个系统肯定是以学生为服务主体,一个学生基本单元包括什么元素呢?显而易见的,学号、姓名、入学日期、毕业日期等都是必不可少的,甚至还要考虑成绩、班级、宿舍房间等元素。这样我们可以发现有没有一种C++内置类型可以描述一个学生个体呢?答案是否定的。我们用整型可能只能表示学号,用浮点数可能只能表示成绩、string表示姓名、班级、宿舍等,这些类型都不能完全描述整个学生个体,但是都能分别表示学生个体的一部分元素。如果我们把每一个学生都分别按照其元素进行定义变量肯定也是可以实现的,但是这样实在是过于复杂。为了解决这种问题的出现,C++为我们提供了自定义数据结构的功能。


从基本的层面理解,数据结构就是把一组相关的数据元素组织起来。


下面我们就以书店售货系统为例,编写一个Sale_data类,简单起见我们这里只介绍了struct关键字,class关键字在后面的博客中也会进行叙述但是今天就不多介绍了。

我们初步假设Sale_data类中包含:

图书编号 : bookNo (string类型)

销售状态 : units_sold (unsinged int 类型)

单价 : price (double 类型)

收益 : revenue (double 类型)

/*
Author: wxc_1998
Date: 2018/9/25
*/
#include <iostream>
#include <string>
using namespace std;
struct Sale_data
{
  string bookNo = "";
  unsigned int unit_sold = 0;
  double price = 0.0;
  double revenue = 0.0;
};

如上述代码中所示,我们已经通过 struct 关键字定义了一个属于我们自己的数据结构类型Sale_data。

注意上面我们引入了string头文件,这是因为我们在自定义的类中包含了string类型数据。

我们可以看到上述自定义类中的成员都进行了初始化,这是C 11 新标准的一个重大改变,我们在VS 2015环境下可以进行初始化操作,但是更早的IDE作者不能保证代码是否会提示错误,我本人在VS 2010环境下提示错误。。。。

我们要记住在写完自己定义的类型之后要记得在最后一个花括号后加上 ; 这样表示声明符的结束。


定义好了我们自己的类之后还要进行使用。下面我们就用已经定义好的数据类型来定义一个Sale_data变量。

void main()
{
  Sale_data data1 , data2 , *salesptr ;
}

与内置类型变量的定义基本相同。

我们定义了data1 和data2 两个变量,那么我们怎么为其输入数据呢?

    cin >> data1.bookNo >> data1.unit_sold >> data1.price ;
  cin >> data2.bookNo >> data2.unit_sold >> data2.price ;

接着我们就可以对其进行计算收益了。

data1.revenue = data1.unit_sold * data1.price;
  data2.revenue = data2.unit_sold * data2.price;

除此之外,我们还可以考虑一种情况,如果这两本书的编号相同,那么这就代表两本书相同,我们可以把两本书的收益相加后输出,而如果不同我们则可以分别输出。所以我们还需要对两本书的编号进行一个判断运算。

  if ( data1.bookNo == data2.bookNo )
  {
    unsigned int total_num = data1.unit_sold + data2.unit_sold;
    double total_rev = data1.revenue + data2.revenue;
    if (total_num != 0)
    {
      cout << "ISBN_Number   "  << "total_number   " << "total_revenue   " << endl;
      cout << data1.bookNo  << "   "  << total_num << "   "  << total_rev << endl ;
    }
  }
  else
  {
    cout << "there is two kinds books" << endl;
    cout << "ISBN_Number   "  << "price   " << "number   " << "revenue   " << endl ;
    cout << data1.bookNo  << "   "  << data1.price << "   "  << data1.unit_sold << "   " << data1.revenue<< endl ;
    cout << data2.bookNo  << "   "  << data2.price << "   "  << data2.unit_sold << "   " << data2.revenue<< endl ;
    cout << "total revenue : " << data1.revenue + data2.revenue ;
  }
  cout << endl << "press any key to continue!" << endl;
  cin.clear();
  cin.sync();
  cin.get();

从上述代码中我们可以看到当我们在使用自定义数据结构中的元素时需要通过 . 符号,来获得自定义数据变量中的具体元素。


通过上述代码的调整输出,我们下面来验证一下程序的正确性。


假设输入原始数据:

9073-3-221-056 2 100回车

9073-3-221-056 2 100回车

输出结果:

96447814-120fc980-1245-11eb-938d-6ea408716c72.png

假设输入原始数据:

9073-3-221-056 2 100回车

9072-2-222-055 1 200回车

输出结果:

96447814-120fc980-1245-11eb-938d-6ea408716c72.png

好了这次我们就写到这里了。

注:虽然这篇博客的内容十分简单,但是大家若有转载还请标明出处!

还有大家若对博客中的内容有任何问题可以随时联系我提问。

目录
相关文章
|
3月前
|
安全 编译器 C语言
【C++数据结构】string的模拟实现
【C++数据结构】string的模拟实现
|
3月前
|
C++
C++ PCL 沿着自定义的平面做横截面(直通滤波)
C++ PCL 沿着自定义的平面做横截面(直通滤波)
44 0
|
3月前
|
C++
c++学习笔记07 结构体
C++结构体的详细学习笔记07,涵盖了结构体的定义、使用、数组、指针、嵌套、与函数的交互以及在结构体中使用const的示例和解释。
39 0
|
2月前
|
存储 JSON NoSQL
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
这篇文章是关于Redis基本数据结构的学习笔记,包括了String、Hash、Set、List和SortedSet的介绍和常用命令。文章解释了每种数据结构的特点和使用场景,并通过命令示例演示了如何在Redis中操作这些数据结构。此外,还提供了一些练习示例,帮助读者更好地理解和应用这些数据结构。
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
|
1月前
|
NoSQL Redis C++
Redis的实现五:二叉堆的数据结构和TTL、c,c++的实现
这篇文章详细探讨了二叉堆的数据结构及其在C和C++中的实现,特别强调了二叉堆在Redis中实现TTL(生存时间)功能的重要性,并通过代码示例展示了如何在Redis中使用二叉堆来管理键的过期时间。
41 0
|
1月前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
19 0
|
2月前
|
安全 C语言 C++
C++学习笔记
C++学习笔记
|
3月前
|
C++
c++学习笔记02 运算符
C++学习笔记,介绍了C++中的运算符,包括基本的加减乘除、求模、前后置递增递减、赋值运算符、比较运算符和逻辑运算符的使用及其注意事项。
40 6
|
3月前
|
C++
c++学习笔记01 基本知识与数据类型
C++学习笔记,涵盖了C++中的常量定义、数据类型、变量内存大小计算、基本数据类型(整型、实型、字符型、字符串型、布尔型)以及转义字符的使用。
46 4
|
3月前
|
算法 C++
c++学习笔记04 数组
这篇文章是C++学习笔记4,主题是数组。
43 4