C++菜鸟学习笔记系列(6)——简单头文件的编写

简介: C++菜鸟学习笔记系列(6)——简单头文件的编写

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

——简单头文件的编写

我们在上一篇博客 C++菜鸟学习笔记系列(5)中已经叙述了一些关于在C++中创建自己的数据类型的一些方法,但是随之而来的一个问题是我们在创建了一个自定义类之后经常还要在其他的文件中使用同样的类,这时候我们可以在每个文件中都重新进行定义,但是这是十分麻烦的,给我们的代码带来很多冗余。


那么为了能够解决这个问题,C++为我们提供了编写头文件的功能,我们可以实现各源文件中类的定义一致,而且为了更好的表示和记忆,头文件和类的名字通常保持一致。例如,库类型 string 定义在名为 string 的头文件中。所以书接上回,我们本次就要尝试定义一个Sale_data.h头文件,并在这个头文件中进行 Sale_data 数据类型的定义。

/*
Author: wxc_1998
Date: 2018/9/26
*/
#ifndef SALE
#define SALE
#include <string>
using namespace std;
struct Sale_data
{
  string bookNo;
  unsigned int unit_sold;
  double revenue;
  double price;
};
#endif

我们首先看到的

#ifndef SALE
#define SALE
...
...
#endif

这样的结构是C++程序实现预处理功能的头文件保护符,头文件保护符依赖于预处理变量。预处理变量有两种状态:未定义和已定义。

#define SALE 是把 SALE 指定为预处理变量。

#ifndef SALE


#endif 是检查某个指定变量(SALE)是否已经定义,若变量未定义,则为真,执行其之间所包含的操作。而当我们执行了#define SALE之后 SALE变量被指定为预处理变量,则判断为假,直接跳过之间的操作。


注意:使用这些功能可以避免重复包含的情况出现,整个程序中的预处理变量包括头文件保护符必须唯一,通常的做法是基于头文件中的类的名字来构建保护符的名字,以确保其唯一性。为了避免与程序中的其他实体发生名字冲突,一般把预处理变量的名字全部大写。


其实这些功能对于我们现在来说来没有太多的用处,这是因为我们还没有在另一个自定义头文件中引用此文件。但是头文件保护符的设置十分简单,我们只要习惯性的加上就可以了没有必要太在乎我们具体是否需要,反正不会造成什么错误。


那么我们在头文件中定义了属于我们自己的数据结构类型Sale_data 之后,我们应该怎样去使用它呢?

#include "Sale_data.h"

我们只需类似于引用已定义的库文件就可以了,不过在这里我们要注意在引用我们自定义的头文件时要使用“”而不是<>而且文件名不要忘记了后缀 .h 。

之后后续的使用方法(C++菜鸟学习笔记系列(5))就和在源文件中定义的数据类型相同了。

我们直接附上源码:

Sale_data.h

/*
Author: wxc_1998
Date: 2018/9/26
*/
#ifndef SALE
#define SALE
#include <string>
using namespace std;
struct Sale_data
{
  string bookNo;
  unsigned int unit_sold;
  double revenue;
  double price;
};
#endif

main.cpp

/*
Author: wxc_1998
Date: 2018/9/26
*/
#include <iostream>
#include <string>
#include "Sale_data.h"
using namespace std;
void main()
{
  Sale_data data1 , data2 , *salesptr ;
  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();
}

好了本次的博客就写到这里了。

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

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

目录
相关文章
|
29天前
|
C++
c++学习笔记07 结构体
C++结构体的详细学习笔记07,涵盖了结构体的定义、使用、数组、指针、嵌套、与函数的交互以及在结构体中使用const的示例和解释。
31 0
|
15天前
|
安全 C语言 C++
C++学习笔记
C++学习笔记
|
29天前
|
C++
c++学习笔记02 运算符
C++学习笔记,介绍了C++中的运算符,包括基本的加减乘除、求模、前后置递增递减、赋值运算符、比较运算符和逻辑运算符的使用及其注意事项。
30 6
|
29天前
|
C++
c++学习笔记01 基本知识与数据类型
C++学习笔记,涵盖了C++中的常量定义、数据类型、变量内存大小计算、基本数据类型(整型、实型、字符型、字符串型、布尔型)以及转义字符的使用。
40 4
|
29天前
|
算法 C++
c++学习笔记04 数组
这篇文章是C++学习笔记4,主题是数组。
35 4
|
28天前
|
C++
【学习笔记】【C/C++】 c++字面值常量
【学习笔记】【C/C++】 c++字面值常量
26 1
|
29天前
|
存储 C++
c++学习笔记05 函数
C++函数使用的详细学习笔记05,包括函数的基本格式、值传递、函数声明、以及如何在不同文件中组织函数代码的示例和技巧。
27 0
c++学习笔记05 函数
|
28天前
|
编译器 C++
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
28 0
|
28天前
|
存储 C++
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
30 0
|
29天前
|
C++
c++学习笔记09 引用
C++引用的详细学习笔记,解释了引用的概念、语法、使用注意事项以及引用与变量的关系。
38 0