![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++ Primer
文章平均质量分 80
comwise
这个作者很懒,什么都没留下…
展开
-
智能指针
前景摘要 1)在复制控制里面,一般复制成员都是复制其值,复制指针只复制指针的地址,而不会复制指针指向的对象。 2) 将一个指针复制到另一个指针时,两个指针指向同一对象,删除其中任意一个,都对另一个有硬性,特别是动态分配的内存,会导致程序崩溃。 3) 如何使用指针呢?这里就牵涉几种情况: a)指针成员采取常规指针行为 :指针的缺陷但无需特殊的复制控制 b)类采取智能指针行为:指针指原创 2014-02-21 15:07:59 · 959 阅读 · 0 评论 -
C++复制构造函数
复制构造函数、赋值操作符、析构函数总称为复制控制 复制构造函数定义:是一种特殊的构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用 用于的情况: 1)初始化对象 ,根据另一个同类型的对象显式或隐式初始化它复制对象 2)作为实参传给函数时,复制这个对象 3)函数返回时,复制对象 4)初始化顺序容器中的元素 5)根据元素初始化列表初始化数组元素 1. 对象的定义原创 2014-02-17 13:45:09 · 961 阅读 · 0 评论 -
虚函数与动态绑定的那点事
面向对象编程的概念 1)多态:简单理解就是多种形态,通过继承而相关联的类型,特别在运行的情况下,对象可能是基类也可能派生类类型 1)继承:能够对类型之间的关系建模,共享公共的东西,仅仅特化本质上不同的东西。 定义为virtual的函数是基类期待派生类重新定义的,基类不希望派生类继承的则定义为非虚函数,这样类就有虚函数与非虚函数之分 2)动态绑定:使程序使用继承层次中任意类型的对象,无需关心具体的类型。 在C++,通过引用或者指针调用虚函数,发生动态绑定,引用或指针既可以指向基类对象也可以指向派生类原创 2014-02-27 14:10:44 · 2984 阅读 · 1 评论 -
消息处理实例解说
Message处理消息,Folder存放Message消息,一个Message消息可以放入多个文件夹Folder,一个Folder可以存放多个Message 按照此种方式设置了Message类插入消息,移除消息,将消息放入所有文件夹,移除所有文件夹中的消息,Folder类存放消息,移除消息 class Folder; class Message { public: Message(const原创 2014-02-19 16:02:13 · 1135 阅读 · 0 评论 -
你所不知道的 const
1. const对象的初始化 const 常量是不可修改的,也就是说only read,例如 const int nBuffSize = 512; nBuffSize = 0; //error 就是因为const 常量不能修改,所以定义时必须初始化 2. const对象的文件局部性 默认在全局作用域中定义的非const变量可以在整个程序中访问,例如 //file1.c int nC原创 2014-01-14 10:40:48 · 1153 阅读 · 0 评论 -
C++构造函数
C++中构造函数是特殊的成员函数,只要定义类的新对象就会执行构造函数,构造函数是保证每个对象的数据成员具有合适的初始值。 构造函数特点: 1)构造函数与类同名,不能指定返回类型,且不能声明为const函数,详见const的使用 2)构造函数可以重载,所以可以有多个构造函数 sales_item(void) /*const*/; sales_item(istream &is /*= ci原创 2014-02-13 15:43:25 · 952 阅读 · 0 评论 -
C++赋值操作符与析构函数
赋值操作符的定义: 1)赋值操作符,就是常用变量赋值的“=”,将一个玩意赋值给另一个玩意 2)默认形式:classType & operator=(const classType &); operator后面紧跟要重载的操作符就是操作符重载的默认形式;形参是本类类型的引用,默认第一个形参就是类类型对象自己的指针this;返回类型就是类类型的引用 合成赋值操作符: 合成赋值操作符也是采用原创 2014-02-18 16:44:46 · 1209 阅读 · 0 评论 -
成员操作符剖析
前面的操作符都比较一般,但是这里的调用就有点小不同了,如下设计的类(与智能指针类似) class ScrPtr { public: friend class ScreenPtr; friend class ScrPtrTest; //这个先不用管,后面我会用到 ScrPtr(screen* p):sp(p),count(1) { }; ~ScrPtr() { /*delete sp;*/原创 2014-02-25 22:28:05 · 1698 阅读 · 0 评论 -
算法操作符和关系操作符
类设计如下: class sales_item { public: friend istream& operator>>(istream&, sales_item&); friend ostream& operator<<(ostream&, const sales_item&); friend sales_item operator+(const sales_item& sale1, c原创 2014-02-25 21:55:28 · 1064 阅读 · 0 评论 -
输入和输出重载操作符
类的设计如下: class sales_item { public: friend istream& operator>>(istream&, sales_item&); friend ostream& operator<<(ostream&, const sales_item&); //explicit sales_item(void); // 防止隐式转换 sales_item(v原创 2014-02-22 18:45:26 · 1588 阅读 · 0 评论 -
C++重载操作符
重载操作符 原型:返回类型 operator操作符(形参); 注意事项: (1)不能通过连接其他合法符号来创建任何新的操作符,如下是错误的: sales_item operator**(const sales_item &org); //error 不能通过连接其他合法操作符来创建任何新的操作符 (2)重载操作符必须一个具有类类型,类成员的话因为有一个默认的本类this原创 2014-02-22 18:45:08 · 1014 阅读 · 0 评论 -
C++中如何声明 “友元类” 和 “友元函数”
调试平台:win7 vs2012 win32控制台终端项目 友元(friend) 字面义:顾名思义既然是朋友了,我的东西同样可以给你使用 书面语:将一个类的非公有成员(包括方法和成员变量)的访问权限赋予指定的类或者指定的函数 关键字为:friend 类原型/函数原型(包含域) 1.将类声明为友元,看下面例子 注意:这里使用两个文件,每个类占用一个文件,调试有其他类(只保留跟这个有关的)原创 2013-11-05 18:57:32 · 7241 阅读 · 1 评论 -
STL之关联容器(pair、map、set的使用)
1.关联容器与顺序容器的对比 1)关联容器是通过键存储和读取元素,而顺序容器则是通过元素在容器中的位置顺序存储和访问元素 2)物理存储方式:一般关联容器是非连续内存存储,而顺序容器一部分是连续存储在内存中,随机访问速度较快,如vector、deque 关联容器一般包括map、set两种基本的关联容器: 【map】关联数组,元素通过键来存储和读取;适用于需要存储/修改每个键所关联的值的情原创 2014-03-02 21:21:38 · 3685 阅读 · 1 评论