c++基础知识
sumx2015
这个作者很懒,什么都没留下…
展开
-
深入了解构造函数
struct Sales_data{ friend Sales_data add(const Sales_data&, const Sales_data&); friend std::istream &read(std::istream&, Sales_data&); friend std::ostream &print(std::ostream&, const Sales_data&);原创 2017-12-13 17:08:25 · 260 阅读 · 0 评论 -
详解宏定义(#define)
原文见:https://blog.csdn.net/yanggangclcsdn/article/details/49704089C语言中用到宏定义的地方很多,如在头文件中为了防止头文件被重复包含,则用到:#ifndef cTest_Header_h#define cTest_Header_h//头文件内容#endif1234在我们常用的 stdio.h 头文件中也可以见到很多宏定义,如:#...转载 2018-05-08 15:19:32 · 1014 阅读 · 0 评论 -
delete和析构函数间的关系及细节
delete和析构函数间的关系及细节 原文见:http://blog.sina.com.cn/s/blog_78c5ff950102vjoe.html个人心得:先看以下代码#include#includeusing namespace std; class shape { public: char x; shape(char m) { x=m; cout <...转载 2018-05-07 22:35:44 · 15620 阅读 · 3 评论 -
关于“operator=”
一、中心思想1、令赋值操作符返回一个*this的引用;2、确保“自我赋值”时,operator=有良好行为(特别是异常安全)。。包括比较“来源对象”和“目标对象”的地址、精心周到的语句顺序、以及copy-and-swap;3、拷贝函数(拷贝构造函数和拷贝操作符)应该确保复制“对象内的所有成员变量”以及“所有基类成分”;4、不要师徒用某个拷贝函数实现另外一个拷贝函数。。。。应该将共同机能的代码放进第...原创 2018-05-06 15:21:58 · 2731 阅读 · 0 评论 -
若不想使用编译器自动生成的函数,就该明确拒绝
一、中心思想为驳回编译器自动提供的技能,可将相应的成员函数声明为private并且不予实现或者使用base class的做法二、主要内容1、将相应的成员函数声明为private将copy构造函数或赋值符函数声明为private成员,使得用户不能对其进行成功调用e.gclass HomeForSale{public:......private:......HomeForSale(const Home...原创 2018-04-27 10:42:11 · 417 阅读 · 0 评论 -
绝不在构造和析构过程中调用虚函数
一、中心内容因为类调用从不下降至派生类,导致若为纯虚函数,则找不到函数的实现代码;若为非虚函数,则可能会导致调用错误的函数版本。。。二、内容简介考虑这样一系列继承:class Transaction{public: Transaction(); virtual void logTransaction() const = 0;//每创建一个交易对象,在审计日志中需要创建一笔适当记录,由此...原创 2018-05-04 16:43:31 · 275 阅读 · 0 评论 -
两种情况下不会生成默认拷贝赋值运算符
1、成员变量包含了const和引用e.gtemplate<class T>class NamedObject{public: NamedObject(std::string& Name, const T& value): nameValue(Name),objectValue(value){}private: std::string& nameV...原创 2018-04-26 14:56:09 · 745 阅读 · 0 评论 -
确定对象使用前已经初始化
一、中心内容1、为内置类型对象进行手工初始化,因为C++不保证初始化他们。2、构造函数最好使用成员初始列表,而不要在构造函数本体内使用赋值操作。初始列表列出的成员变量,其排列次序应该和它们在class中的声明次序相同;3、为免除“跨编译单元值初始化次序”问题,请以local static对象替换non-local static对象。二、主要内容(1)初始化的最佳方式是用初始化列表e.gclass ...原创 2018-04-26 11:22:40 · 344 阅读 · 0 评论 -
尽量以const、enum、inline替换#define(编译器替换预处理器)
一、中心内容:1、对于单纯常量,最好以const对象或enums替换#defines;2、对于形似函数的宏,最好改用inline函数替换#define。二、简述(1)const和#definee.g #define ASPECT_RATIO 1.653; 改为 const double AspectRatio = 1.653;//大写名称通常用于宏1、前者的ASPEC...原创 2018-04-24 15:55:08 · 537 阅读 · 0 评论 -
尽可能使用const
一、中心思想1、将某些东西声明为const可帮助编译器侦测出错误用法。const可被施加于任何作用域内的对象、函数参数、函数返回类型、函数返回类型、成员函数本体;2、编译器强制实施bitwise constness,但你编写程序时应该使用“概念上的常量性”;3、当const和non-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码重复。二、简述1、面对指...原创 2018-04-25 15:37:45 · 280 阅读 · 0 评论 -
为多态基类声明virtual析构函数
一、中心内容1、polymorphic(带多态性质的)base classes应该声明一个virtual析构函数。如果class带有任何virtual函数,它就应该拥有一个virtual析构函数;2、Classes的设计目的如果不是作为base Classes使用,或不是为了具备多态性,就不该声明virtual析构函数。二、内容简介1、资源泄漏class TimeKeeper{public: ...原创 2018-05-02 10:17:39 · 438 阅读 · 0 评论 -
C++之类的析构函数
C++之类的析构函数 一、认识析构函数 原文见:https://www.cnblogs.com/MrListening/p/5567762.html 这里我们来简单说说类的析构函数,它是类的一个成员函数,名字由波浪号加类名构成。看它的名字我们大概就能联想到他功能,是执行与构造函数相反的操作:释放对象使用的资源,并销毁非static成员。 同样的,我们来看看析构函数的几个特点:1....转载 2018-03-06 22:48:41 · 468 阅读 · 0 评论 -
顶层const和底层const
#include#includeusing namespace std;int main() {int i = 0;int *const p1 = &i;//p1是常量,即指针本身是一个常量,所以是一个顶层constconst int ci = 42;//同上const int *p2 = &ci;//p2的值可以改变,不变的是p2指针所指向的内容,所以是底层c原创 2017-12-06 12:08:10 · 366 阅读 · 0 评论 -
【转】TCP的11种状态
TCP头部:六个标志位中,我们要用到三个: SYN:SYN= 1 表示这是一个连接请求或连接接受报文。在建立连接时用来进行同步序号(个人理解是,在建立连接的时候,提醒对方记录本方的起始序号)。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若是同意建立连接,则应响应的报文段中使SYN=1、ACK=1。因此SYN=1表示该报文是一个连接请求报文或者是一个连接请求接收报文。ACK:确认号只...转载 2018-06-26 10:31:10 · 367 阅读 · 0 评论