头文件(.h)
头文件(header files)定义C++/C程序的头文件以.h为后缀。使用时需要在.cpp文件中意#include<fileName.h>的方式引入。头文件作为一种包含功能函数、数据接口声明的载体文件,主要用于保存程序的声明,而定义文件用于保存程序的实现。
头文件中常包含的内容
函数原型
使用#define或const定义的符号常量
结构声明
将结构声明放在头文件中是可以的,因为它们不创建变量,而只是在源代码文件中声明结构变量时,告诉编译器如何创建该结构变量。
类声明
内联函数(inline)
shared_ptr详细用法
shared_ptr#include<memory>
要确保用 new 动态分配的内存空间在程序的各条执行路径都能被释放是一件麻烦的事情。C++ 11 模板库的 头文件中定义的智能指针,即 shared _ptr 模板,就是用来部分解决这个问题的。
只要将 new 运算符返回的指针 p 交给一个 shared_ptr 对象“托管”,就不必担心在哪里写delete p语句——实际上根本不需要编写这条语句,托管 p 的 shared_ptr 对象在消亡时会自动执行delete p。而且,该 shared_ptr 对象能像指针 p —样使用,即假设托管 p 的 shared_ptr 对象叫作 ptr,那么 *ptr 就是 p 指向的对象。
通过 shared_ptr 的构造函数,可以让 shared_ptr 对象托管一个 new 运算符返回的指针,写法如下:
1shared_ptr<T> ptr(new T); // T 可以是 int、char、类等各种类型
此后,ptr 就可以像 T 类型的指针一样使用,即 ptr 就是用 new 动态分配的那个对象。
多个 s ...
C++关键字——extern
C/C++中extern关键字详解
一个很容易忽略的关键字
基本解释extern可以放在变量或者函数前。表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找定义。此外exrtern也可以用来进行链接指定。
1. 用作外部变量的声明与使用如果在多个文件中使用外部变量,只需在一个文件中包含该变量的定义(单定义规则),但在使用该变量的其他所有文件中,都必须使用extern声明它:
12345678//file01.cppextern int cat = 20; //定一个flag变量并初始化int dog = 22;int fleas;//file02.cpp//使用file01的cat和dogextern int cat;extern int dog;
在上述例子中,因为file02并没有声明fleas变量,因此无法使用,但是声明了cat和dog,因此可以使用这两个变量。由此可见,关键字extern并非必不可少的,因为即使省略它,效果也相同。
2、函数的声明函数的声明中extern关键字是可有可无的,因为函数本身不加修饰的话就是extern。但是引用的时候一样 ...
内存分配
自动存储、静态存储和动态存储
存储区域主要为栈和自由存储区,栈多服务于临时变量和一些非动态申请的数据类型
自由存储区或堆通常为一个概念,存储动态申请的变量和数据类型(new)、vector
1、自动存储(栈)
自动存储的为自动变量,自动变量一般都是程序云心过程中函数的局部变量,常存储在栈中,所以在执行代码时,是按照后进先出进行变量存储,这也就意味着,在程序执行过程中,栈的大小是不断变化的。
2、静态存储(堆) 静态存储的两种方式:
1. 在函数外面定义
2. 在声明变量时,加上关键字static
3、动态存储(堆)==new和delete==的应用,其管理着一个内存池(在C++中也被称为自由存储空间或堆),所创建的变量同存储静态存储的内存是分开的。
C++常识与通识
整理自个人学习过程中的所见所得
C++文件操作
一个最简单的打开文件写的demo1234567891011121314151617181920212223242526272829303132333435363738/** @fn ReadJson* @brief 从制定路径的文件中读取Json字符串保存到sJson中* @param[in] wsFilePath: 读取Json文件的路径 sJson: 保存读取文件内容的字符串* @param[out] * @return * * @detail * @author mingming.shi* @date 2021-09-16*/BOOL ReadJson(__in tstring wsFilePath, __out std::string& sJson, int *pErr){ FILE* fp_read = NULL; fp_read = _wfopen(wsFilePath.c_str(), _T("w+")); in ...
虚函数与纯虚函数
本篇讲述虚函数与纯虚函数的区别与用法
**对于抽象类来说,它无法实例化对象,而对于抽象类的子类来说,只有把抽象类中的纯虚函数全部实现之后,那么这个子类才可以实例化对象**
12345678910class person{private: int age; bool gender;public: void work(); void printInfo(); };
简单理解就是父类定义了一个群体将会有的动作以及行为:如Worker类,我们仅知道工人们会工作,但是我们不知道具体是什么工人以及从事于什么样的工作,因此,可以把worker类定义为抽象类,用以规定可能会有的行为以及操作。
12345678910class worker:public person{private: int age; bool gender;public: //定义为抽象基类是避免实例化造成的编译报错,并且基类的定义时1为了规定大致的行为操作,具体的内容实现是基于继承类 virtual void work() = 0; virt ...
class与struct的区别与用法
本篇讲述class与struct的区别与用法
命名常识
struct与class的区别
C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。
struct能包含成员函数吗? 能!
struct能继承吗? 能!!
struct能实现多态吗? 能!!!
1)默认的继承访问权限。struct是public的,class是private的。2)struct作为数据结构的实现体,它默认的数据访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的。
coutpu()函数,该函数显示一个字符
decltype类似于typedef,但是typedef加类型,decltype加变量
12345678910111213141516int n = 0;decltype(n) n2;//n2是int类型typedef int INT;INT n3;//n3也是int类型typedef void(*pfun)();//类外声明auto add(int a,int b){ re ...
共用体(union)
共用体定义用体(union)是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。也
就是说,结构可以同时存储int、long 和double,共用体只能存储 int、long或double。共用体的句法与结
构相似,但含义不同。例:
12345union one4all { int int_val; long long_val; double double_val;};
具体使用如下所示:
123456789101112131415161718192021222324#include <iostream>#include "main.h"using namespace std;//创建一个共用体union one4all { int int_val; long long_val; double double_val;};int main(){ //在同一时间只能之勇union中变量的一种 one4all temp; temp.int_val = 10; cout << te ...
存储空间
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576// 删除向量中的所有元素,然后将选代器first和last指示范围中的元素插入该向量中void assign(iterator first,iterator last) //删除向量中的所有元素,然后将cdl的n个副本插入该向量中void assign(size_type n,constT&el=T()) //返回向量中位置为n的元素T&at(siz type n) //返回向量中位置为n的元素const T&at(size_type n)const //返回向量的最后一个元素T&back() //返回向量的最后一个元素const T&back()const //返回一个选代器,该选代器引用向量的第一个元素iterator begin() //返回一个迭代器 ...