《深入浅出MFC》– C++的重要性质、虚函数表
1.对象的属性有两大成员,一是成员变量、二是成员函数。把数据声明为private,不允许外界随意存取,只能通过特定的接口来操作,这就是面向对象的封装特性。 2.隐藏的this指针。 编译器实际上为你做出来的代码是: CRect::setcolor(2, (CRect*)&rect1); CRect::setcolor(3, (CRect*)&rect2);   […]
1.对象的属性有两大成员,一是成员变量、二是成员函数。把数据声明为private,不允许外界随意存取,只能通过特定的接口来操作,这就是面向对象的封装特性。 2.隐藏的this指针。 编译器实际上为你做出来的代码是: CRect::setcolor(2, (CRect*)&rect1); CRect::setcolor(3, (CRect*)&rect2);   […]
1.所有Windows程序都必须载入windows.h。 2.每一个Windows程序都应该有一个如下的循环: MSG msg; while(GetMessage(&msg,NULL,NULL,NULL)){ TranslateMessage(&msg); Dispat […]
● 异常是通过抛出(throw)对象而引发的。该对象的类型决定应该激活哪个处理代码。被选中的处理代码是调用链中与该对象类型匹配且离抛出异常位置最近的那个。 执行throw的时候,不会执行跟在throw后面的语句,而是将控制从throw转移到匹配的catch,该catch可以是同一函数中局部的catch,也可以在直接或间接调用发生异常的函数的另一个函数中。 ● 栈展开 异常的传播方式和 […]
● 定义函数模板 template <typename T> int compare(const T &v1, const T &v2) { if(v1 < v2) return –1; if(v2 < v1) […]
● 基类和派生类 一、定义基类 1.基类成员函数 除了构造函数之外,任意非static成员函数都可以是虚函数。保留字virtual只在类内部的成员函数声明中出现,不能用在类定义体外部出现的函数定义上。基类通常应将派生类需要重定义的任意函数定义为虚函数。 2.访问控制和继承 public和protected成员都可以被派生类访问,而private成员不能被派生类访问。 3.protected成员 像 […]
● 复制构造函数 只有单个形参,而且该形参是对本类类型对象的引用(常用const修饰),这样的构造函数称为复制构造函数。与默认构造函数一样,复制构造函数可由编译器隐式调用。复制构造函数可用于: 1.根据另一个同类型的对象显式或隐式初始化一个对象。 2.复制一个对象,将它作为实参传给一个函数。 3.从函数返回时复制一个对象。 4.初始化顺序容器中的元素。 5.根据元素初始化式列表初始化数组元素。 & […]
● 类的定义和声明 Sales_item():units_sold(0),revenue(0.0){} 构造函数初始化列表由成员名和带括号的初始值组成,跟在构造函数的形参表之后,并以冒号开头。 在类内部定义的函数默认为inline。 将关键字const’加在形参表之后,就可以将成员函数声明为常量。 double avg_proce() const; cons […]
● 只读算法 int sum = accumulate(vec.begin(), vec.end(), 42); 将sum的值设置为vec的元素之和再加上42.容器内的元素类型必须与第三个实参的类型匹配,或者可转换为第三个实参的类型。 find_first_of 这个算法带有两对迭代器参数来标记两段元素范围,在第一段范围内查找与第二段范围中任意元素匹配的元素,然后返回一个 […]
● 关联容器类型 map 关联数组,元素通过键来存储和读取 set   […]
● 顺序容器:将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素,这就是顺序容器。顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定。 1.标准库定义了三种顺序容器类型:vector、list 和 deque(是双端队列“double-ended queue”的简写,发音为“deck”)。它们的差别在于访 […]