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(); }
好了本次的博客就写到这里了。
注:虽然这篇博客的内容十分简单,但是大家若有转载还请标明出处!
还有大家若对博客中的内容有任何问题可以随时联系我提问。