随笔分类 - C++
摘要:大多数情况下,适当提出你的 classes(和 class templates)定义以及 functions(和 function templates)声明,是花费最多心力的两件事。一旦正确完成它们,相应的实现大多直截了当。尽管如此,还是有些东西需要小心。太快定义变量可能造成效率上的延迟;过度使用转
阅读全文
摘要:wap是个有趣的函数。原本它只是STL的一部分,而后成为异常安全性编程的脊柱,以及用来实现自我赋值可能性的一个常见机制。所谓swap两对象值,就是将两对象的值交换。 典型实现 缺省情况下的swap动作可有标准库提供的swap算法完成: namespace std{ template<typename
阅读全文
摘要:将成员变量声明为private 为什么成员变量不该是public? (1)从语法一致性来说,如果成员变量不是public,就需要通过成员函数访问成员变量。public接口内的每样东西都是函数的话,客户就不需要在访问class成员时考虑要不要加小括号。(2)如果成员变量是public,任何人都可以读写
阅读全文
摘要:所谓软件设计,是“令软件做出你希望它做的事情”的步骤和做法,通常以颇为一般性的构想开始,最终演变成十足的细节,以允许特殊接口的开发,这些接口而后必须转换为C++声明式。本章将以接口开始讲解软件设计和声明,主要包括以下几个部分: 接口 类 参数 返回值 成员变量 成员函数 让接口容易被正确使用,不易被
阅读全文
摘要:所谓资源就是,一旦用了它,将来必须还给系统。C++程序中常见的资源有: 动态分配内存 文件描述器 互斥锁 图形界面的字型和笔刷 数据库连接 网络sockets 如何管理资源? 手动管理资源 假设有一个基类BaseCamera,各式各样的相机类继承自它,通过工厂函数供应某个特定的相机对象: BaseC
阅读全文
摘要:几乎你写的每一个class都会有一个或多个构造函数、一个析构函数,一个copy assignment操作符。如果这些函数犯错,会导致深远且令人不愉快的后果,遍及你的整个classes。所以确保它们行为正确时生死攸关的大事。本章提供的引导可让你把这些函数良好地集结在一起,形成classes的脊柱。 条
阅读全文
摘要:条款01:视C++为一个语言联邦 将C++视为一个由四个次语言组成的联邦: C Object-Oriented C++ Template C++ STL 条款02:尽量以const,enum,inline替换 #define #define ASPECT_RATIO 1.653 使用#define的
阅读全文
摘要:建议直接空降至参考文献,点击链接 简单工厂模式 #include<iostream> using namespace std; class BasicCamera { public: virtual ~BasicCamera() {}; virtual void OpenCamera() = 0;
阅读全文
摘要:程序有时会遇到运行阶段错误,导致程序无法正常走下去。对于这种问题,处理方法主要有: 1.调用abort() Abort()函数原型位于头文件cstdlib,其典型实现是向标准错误流(即cerr使用的错误流)发送消息abnormal program termination(程序异常终止),然后中止程序
阅读全文
摘要:通常,new负责在堆(heap)中找到一个能够满足要求的内存块。new运算符还有一种变体,被称为定位(placement)new运算符,他能让你能够指定要使用的位置。程序员可以使用这种特性来设置其内存管理规程、处理需要通过特定地址进行访问的硬件或在特定位置创建对象。 要使用定位new特性, 需要包含
阅读全文
摘要:成员初始化列表由逗号分隔的初始化列表组成(前面带冒号),它位于参数列调的右括号之后,函数体左括号之前。如果数据成员的名称为mdata,并需要将它初始化为val,则初始化器为mdata(val). Classy::Classy(int val) : mdata(val) 以下三种情况下需要使用初始化成
阅读全文
摘要:1.指针和数组 指针和数组基本等价的原因在于指针算数和C++内部处理数组的方式。在很多情况下,可以用相同的方式使用数组名和指针名。 在多数情况下,C++将数组名视为数组的第一个元素的地址。指针p的值为数组第一个元素的地址,*p数组第一个元素的值。 将指针变量+1后,增加的量等于它指向的类型的字节数。
阅读全文
摘要:1. 定义 浅拷贝(shallow copy):多个对象共用同一块资源,同一块资源释放多次,崩溃或者内存泄漏 深拷贝(deep copy):每个对象共同拥有自己的资源,必须显式提供拷贝构造函数和赋值运算符。 2. 示例 (书p355) #include <iostream> using namesp
阅读全文
摘要:通常情况下,公有类方法是访问类对象私有部分的唯一途径。除此之外,C++还提供了另外一种形式的访问权限:友元。 友元有三种: 友元函数 友元类 友元成员函数 通过让函数成为类的友元,可以赋予该函数与类的成员函数相同的访问权限。 1.为何需要友元 Time Time::operator*(double
阅读全文
摘要:拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。 如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数。拷贝构造函数的最常见形式如下: classname (const classn
阅读全文
摘要:1. 设计思想 智能指针是行为类似于指针的类对象,但这种对象还有其他功能。首先,看下面的函数: void remodel(std::string & str) { std::string * ps = new std::string(str); ... if (weird_thing()) thro
阅读全文
摘要:引用是变量的别名。也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。 1.创建引用 int i = 0; int& r = i;//r是一个出初始化为i的整型引用,r和i的内存地址是相同的。 2. 引用和指针的区别 引用和指针很像,它们都
阅读全文