(一)
public继承意味着“is-a”关系。它的意思是:如果B以public形式继承自A,那么B类型对象肯定是一个A对象,反之不成立。A是B的一种抽象,B是A的特例。任何使用A的地方,都能使用B。
(二)
public继承意味着“is a”(是一种)关系:
(1)任何一个继承类对象也是一个基类对象;
(2)任何可以出现基类对象的地方也可以出现一个继承类对象(例如函数的...
分类:
编程语言 时间:
2014-06-27 10:28:19
阅读次数:
220
(一)
假设你对C++程序的某个class实现文件做了些轻微改变,修改的不是接口,而是实现,而且只改private成分。然后重新建置这个程序,并预计只花数秒就好,当按下“Build”或键入make,会大吃一惊,因为你意识到整个世界都被重新编译和链接了!问题是在C++并没有把“将接口从实现中分离”做得很好。
避免陷入这种窘境的一种有效的方法就是本条款要提出的内容:将文件间的编译依存关系降至最低....
分类:
编程语言 时间:
2014-06-26 14:02:11
阅读次数:
279
(一)
inline函数,可以调用它们而又不需蒙受函数调用所招致的额外开销。
inline函数背后的整体观念是,将“对此函数的每一个调用”都已函数本体替换之,这样做可能增加你的目标码(object code)大小。在内存有限的机器上,过度inline会造成程序体积太大,导致换页行为,降低缓存的命中率等一些带来效率损失的行为。如果inline函数的本体很小,编译器针对“函数本体”所产生的码可能比...
分类:
编程语言 时间:
2014-06-26 07:25:18
阅读次数:
142
1 const 传达的意思应该是这个变量是常量不能更改2 const 在 * 左边表示数据是const,在右边表示指针是const // char greeting[] = "hello"; char* p = greeting; //const *: const data //...
分类:
编程语言 时间:
2014-06-25 11:12:18
阅读次数:
229
(一)先看下面这些代码:
class PrettyMenu {
public:
void changeBackground(istream& imgSrc);
private:
Mutex mutex; //由于这个class希望用于多线程环境,所以它有这个互斥器作为并发控制之用
Image* bgImage; //目前的背景图像
int imageChan...
分类:
编程语言 时间:
2014-06-25 08:35:48
阅读次数:
339
(一)
缺省情况下swap动作可由标准程序库提供的swap算法完成:
namespace std {
template
void swap(T& a, T& b) {
T temp(a);
a = b;
b = temp;
}
}这个函数是异常安全性编程的核心,并且是用来处理自我赋值可能性的一个常见机...
分类:
编程语言 时间:
2014-06-25 00:30:27
阅读次数:
336
(一)
那么当程序的控制流到达这个变量定义时,变承受构造成本;当变量离开作用域时,便承受析构成本。
string encryptPassword(const std::string& password) {
using namespace std;
string encrypted;
if(password.length() < MinimumPasswordLengt) {
t...
分类:
编程语言 时间:
2014-06-24 23:24:54
阅读次数:
297
(一)
假设一个class用来表现有理数,允许整数“隐式转换为”有理数似乎很合理。
class Rational{
public:
Rational(int numerator = 0, int denominator = 1); //刻意不为explicit;允许int-to-Rational隐式转换
int numerator()const;
int den...
分类:
编程语言 时间:
2014-06-24 22:30:51
阅读次数:
270
(一)
有时候为了让一个对象尽量小,可以把数据放在另外一个辅助的struct中,然后再让一个类去指向它。看下面的代码:
class Point {
public:
Point(int x, int y);
void setX(int newVal);
void setY(int newVal);
};
struct RectData {
Point ulhc;
Point lrhc...
分类:
编程语言 时间:
2014-06-24 22:17:30
阅读次数:
240
(一)C风格旧式转型:
(T)expression
T(expression)
(二)C++提供四种新式转型:
(1)const_cast(expression):去除表达式的常量性,是C++中唯一能做此操作的转型操作符。
(2)dynamic_cast(expression):主要用来执行“安全向下转型”,即用来决定某对象是否归属继承体系中的某个类型。它是唯一无法由旧式...
分类:
编程语言 时间:
2014-06-24 20:57:53
阅读次数:
253