首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++核心准则SF.5: .cpp文件必须包含定义它接口.h文件

SF.5: A .cpp file must include the .h file(s) that defines its interface SF.5: .cpp文件必须包含定义它接口.h文件 Reason...Example, bad(反面示例) // foo.h: void foo(int); int bar(long);SF.5: .cpp文件必须包含定义它接口.h文件 int foobar(int);...// foo.cpp: void foo(int) { /* ... */ } int bar(double) { /* ... */ } double foobar(int); The errors...Example(示例) // foo.h: void foo(int); int bar(long); int foobar(int); // foo.cpp: #include void...当foo.cpp被编译时,foobar返回值类型错误可以立即被发现。由于可能存在重载,直到链接时,bar参数类型错误才能被发现。但是系统性地使用.h文件会提高错误被程序员早期发现可能性。

52140

C++编译与链接(0)-.h与.cpp定义与声明

C++中有的东西需要放在可以.h文件定义,有的东西则必须放在.cpp文件定义,有的东西不同cpp文件名字可以一样,而有的则不能一样 那么究竟哪些东西可在头文件定义,声明,哪些东西又必须在...show@@YAXXZ) 已经 a.obj 定义  所以要避免文件定义函数 2、不同.cpp定义函数原型(函数返回值,函数名称,函数参数)不能完全一样, 比如如果有两个.cpp文件均存在...static函数 不同cpp可以定义函数原型一样函数 不同cpp名字可以一样 成员与函数 .h定义,所有成员必须在声明,cpp实现 非静态常量整形数据成员不能就地初始化...模板函数与模板声明与实现必须放在一个文件 总结 是否可以.h定义 不同.cpp是否可以重名 特殊说明 函数 不可以,会出现重定义错误 不可以 内联函数 可以 可以 为了确保所有调用该...需要到头文件以外去定义它) 静态常量整形数据成员 ------------------ 可以 特殊说明 模板 模板函数与模板声明与实现必须放在一个文件 至于为什么会这样,与C++编译和链接

3.5K70
您找到你想要的搜索结果了吗?
是的
没有找到

C++】面向对象示例 - 数组 ( 示例需求 | 创建封装 | 数组文件 Array.h | 数组实现 Array.cpp | 测试 Test.cpp - 主函数入口 )

2019 开发环境 , " 解决方案资源管理器 " , 右键点击 解决方案 , 弹出菜单中选择 " 添加 / " 选项 ; 弹出 添加 对话框 , 输入要创建名 Array...; 会自动生成 Array.h 和 Array.cpp 源码文件 ; 2、生成源码内容 Array.h 源码内容为 : #pragma once 作用是防止被二次导入 , 导致 Array 重复定义..."Array.h" 三、数组实现 ---- 1、数组文件 Array.h 数组 文件 , 对 成员方法 和 成员变量 进行声明定义 ; 成员方法 只进行声明 , 不进行实现 ; 该...int* m_space; }; 2、数组实现 Array.cpp 本代码 , 主要对 构造函数 , 析构函数 , 成员函数 进行实现 ; 注意 , 此处拷贝构造函数 , 使用是深拷贝机制...Test.cpp - 主函数入口 测试 , 首先 , 调用有参构造函数 , 创建数组实例对象 ; 先为该实例对象设置数据 ; 再将之前设置数据打印出来 ; 然后 , 调用 拷贝构造函数 , 创建第二个实例对象

33130

C++】泛型编程 ⑪ ( 模板运算符重载 - 函数实现 写在外部不同 .h 头文件和 .cpp 代码 )

函数声明 和 实现 写在相同 .cpp 源码文件 ; 模板 函数实现 外部进行 , 函数声明 和 实现 写在不同 .h 和 .cpp 源码文件 ; 博客 【C++】泛型编程 ⑨ (...; 博客 【C++】泛型编程 ⑩ ( 模板运算符重载 - 函数实现 写在外部同一个 cpp 代码 | 模板 外部友元函数二次编译问题 ) , 分析了 第二种情况 , 模板 ...函数实现 外部进行 , 写在 一个 cpp 源码文件 ; 本篇博客 , 开始分析 第三种 情况 , 函数实现 外部进行 , 函数声明 和 实现 写在不同 .h 和 .cpp 源码文件...- 函数实现 写在外部同一个 cpp 代码 | 模板 外部友元函数二次编译问题 ) , 分析了 第二种情况 , 模板 函数实现 外部进行 , 写在 一个 cpp 源码文件...; 相当于 将 模板 函数声明 和 函数实现 都定义了 Student.h 头文件 ; 这种类型文件 可以改成 .hpp 后缀 , 表明该文件同时包含了 函数声明 和 函数实现 ; 二

16410

C++定义自己String

这个实现string是比较简单C++标准模板库里面的string方法是非常多,而且非常复杂。...在这里仅仅给大家演示string内部大概实现方法 实例 String.h文件声明 #ifndef STRING_H//头文件卫士,避免头文件被多次编译 #define STRING_H #include...int m_nRealLen; //字符串字符大小 int m_nBuffSize; //字符串空间大小 }; #endif String.cpp实现 #include"String.h..." //包含声明头文件 #define EXT_LEN 50 //定义一个宏,用户申请内存大小,我们实际上为字符串分配空间要多EXT_LEN,以便字符串连接 String::String(...(str[i]); //每次向屏幕输出一个字符 } return output; } main.cpp:测试String功能 #include #include"String.h

43310

C++

比如用户文档输入一串文字需要用到键盘,需要移动鼠标,计算机接口将用户操作转换为存储计算机具体信息。... 通常C++程序员把接口(定义)放在头文件当中,并将实现方法(方法)放在程序源代码当中。...成员函数可以就地定义,也可以只写声明,源代码处定义特性是把数据和方法组成一个单元,可以更方便地使用。...Stock::hook() { ... } 内联函数要求要求使用他文件中都有定义,这样内联函数定义一般文件当中 对象创建 上面我们都没有介绍了内部结构,那么如何创建对象。...使用 C++目标是使得和基本类型尽可能相同,我们声明和定义都已经编写完成,下面我们通过文件来使用这些接口测试一下: 这里还需要说明一下C++文件结构,以及这里我们使用到了之前C语言预编译处理说到内容

16710

C++封装

封装 1、C++,当我们使用时候,我们首先要注意实现细节和使用方式(也就是说我们在做任何事情前,先要考虑好事情大局观甚至加一些要注意细节问题,不然一拿到一件事情,没有方向性去做事情...最后我们要注意是,必须在表示法定义属性和行为公开级别(类似于文件系统中文件权限)。 3、C++封装: ——成员变量:C++中用于表示属性变量。...——成员函数:C++中用于表示行为函数。 ——C++可以给成员变量和成员函数定义定义访问级别: public: 表示成员变量和成员函数可以内部和外部访问和调用。...: 成员作用域都只内部,外部无法直接访问。...注意一点:C++中使用strcut定义所有成员(成员变量和成员函数)默认为pubic(公有的,外部可以调用和访问)。

63930

C++面向对象编程对象定义

class和struct定义稍有区别class成员没有访问限定符(public,private,protected)时会默认成员为私有成员,struct会默认为公有成员 成员函数 定义时要在函数名字前加名字和作用域符...定义成员函数默认为inline函数(内联函数)如果要在定义inline函数需要显式函数声明或定义前加关键字inline。成员函数也可以重载典型的如构造函数。...因为一个中大部分数据是隐藏,总不能老是通过调用公共函数方法来进行初始化。C++提供就是构造函数方法。 构造函数建立规则是这样。...引用成员 const类型成员未提供默认构造函数类型其他都可以定义时候赋予初值 一般最好写两个构造函数 默认构造函数:Student(); 带有参数构造函数:Student(参数列表...一定要强制养成不改变值得函数后加const习惯!!使之成为const成员函数 四、this指针 每个成员函数都有一个隐含参数,指向接收消息对象称为this指针。

99620

C++C++ this 指针用法 ① ( C++ this 指针引入 | this 指针用法 | 代码示例 )

一、C++ this 指针 1、C++ this 指针引入 C++ , this 指针 是一个特殊指针 , 由系统自动生成 , 不需要手动声明定义 , 每个 非静态成员函数..., 因此 this 指针是内部使用指针 , 使用 this 可以访问 实例对象 所有 公有 public / 保护 protected / 私有 private 成员 ; 2、C++ ...this 指针用法 C++ this 指针用法 : 使用 this 作为指针 : 非静态成员函数 , 直接使用 this 作为 本实例对象 指针 ; this 使用 this-> 访问成员变量...访问成员变量 : 非静态成员函数 , 直接使用如下语法 , 访问 本实例对象 非静态成员变量 ; 先获取指针指向数据 然后访问数据成员变量 ; (*this).成员变量名 C++... , 定义了 成员变量 age 和 height , 构造函数 中进行初始化 , 可以使用 this-> age 访问 age 成员变量 , 使用 this->height 访问 height

23220

C++ 容器详解

大家好,又见面了,我是你们朋友全栈君 C++容器包括“顺序存储结构”和“关联存储结构”,前者包括vector,list,deque等;后者包括set,map,multiset,multimap...若需要存储元素数在编译器间就可以确定,可以使用数组来存储,否则,就需要用到容器了。...6、用vector存储自定义对象时,自定义对象须满足: a、有可供调用无参构造函数(默认或自定义); b、有可用拷贝赋值函数(默认或自定义) 7、迭代器iterator...指向容器存放元素类型逆向迭代器,这种迭代器容器逆向迭代 const_reverse_iterator 指向容器存放元素类型逆向迭代器,只能读取容器元素 difference_type...引用相同容器两个迭代器相减结果类型(list和关联容器没有定义operator-) size_type 用于计算容器项目数和检索顺序容器类型(不能对list检索) 8.序列容器 (1)vector

76420

C++ std::string

C++ 在其定义中有一种将字符序列表示为 class 对象方法。这个叫做 std::string。String 将字符存储为具有允许访问单字节字符功能字节序列。 ...std:: 字符串与字符数组 字符数组只是一个可以由空字符终止字符数组。字符串是定义表示为字符流对象 字符数组大小必须静态分配,如果需要,不能在运行时分配更多内存。...字符数组情况下,未使用分配内存被浪费。字符串情况下,内存是动态分配。可以在运行时按需分配更多内存。由于没有预先分配内存,因此不会浪费任何内存。 如果是字符数组,则存在数组衰减威胁。...实现字符数组是快比std :: string。与实现相比,字符串比字符数组慢。 字符数组不提供很多内置函数来操作字符串。String 定义了许多允许对字符串进行多种操作功能。...字符串操作 输入函数 1. getline()  :- 该函数用于在对象内存存储用户输入字符流。 2. push_back()  :- 该函数用于字符串末尾 输入一个字符。

1.1K20

c++.hpp文件

hpp,其实质就是将.cpp实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类调用者只需要include该hpp文件即可,无需再将cpp加入到project中进行编译。...而实现代码将直接编译到调用者obj文件,不再生成单独obj,采用hpp将大幅度减少调用 projectcpp文件数与编译次数,也不用再发布烦人lib与dll,因此非常适合用来编写公用开源库...1、是Header Plus Plus 简写。2、与*.h类似,hpp是C++程序头文件 。3、是VCL 专用文件,已预编译。4、是一般模板文件。...b)之间不可循环调用 .h和.cpp场景,当两个或者多个之间有循环调用关系时,只要预先在头文件做被调用声明即可,  c)不可使用静态成员 静态成员使用限制在于如果类含有静态成员...唯 一例外是const static整型成员,因为vs2003,该类型允许定义时初始化,如:

2K10

C++定义结构体或作为关联容器

概述 STL像set和map这样容器是通过红黑树来实现,插入到容器对象是顺序存放,采用这样方式是非常便于查找,查找效率能够达到O(log n)。...所以如果有查找数据需求,可以采用set或者map。 但是我们自定义结构体或者,无法对其比较大小,放入到容器时候,就无法正常编译通过,这是set/map容器规范决定。...要将自定义结构体或者存入到set/map容器,就需要定义一个排序规则,使其可以比较大小。...最简单办法就是结构体或者中加入一个重载小于号成员函数,这样存数据进入set/map时,就可以根据其规则排序。 2....<< endl; } else { cout << "可以找到点" << endl; } } } 其中关键就是结构体重载了

2K20

C++ 开发,使用模板实现自定义数组

需求描述: 通过使用 C++ 模板特性,实现一个能够存储任意类型数组。可以通过尾部追加方式在数组完成数据传入,且可以通过尾部操作删除数组最后一个元素。...demo 数组第2个元素值为:1 demo 数组第3个元素值为:2 demo 数组第4个元素值为:3 在数组插入自定义类型: 自定义类型数组第1个人 id 为:1 姓名为:赵云...自定义类型数组第2个人 id 为:3 姓名为:刘备 自定义类型数组第3个人 id 为:2 姓名为:诸葛亮 Note: 自定义类型数组无参构造函数不能省略,否则出现以下报错。...]': /cygdrive/h/workspaces/c++/example/main.cpp:135:28: required from here /cygdrive/h/workspaces/c...example/main.cpp:88:7: note: candidate: 'Demo::Demo(Demo&&)' /cygdrive/h/workspaces/c++/example/main.cpp

84710
领券