深入浅出MFC笔记

来源:互联网 发布:微信公众号 java demo 编辑:程序博客网 时间:2024/05/16 05:51

C++重点技术:类别与对象,this指针,继承,静态成员,虚函数与多态、模板(template)类别、异常(exception handling)处理。

执行线程的优先权范围从0(最低)到31(最高)

Multithreading Applications in Win32 一书(Win32 多线程程序设计/ 侯俊杰译)。

每一个内含虚函数的类,编译器都会为其建立虚函数表,例如:
这里写图片描述
衍生类继承基类虚函数表,重写时虚函数表发生变化:
这里写图片描述

class CDocument : public CObject
{
public:
int m_data1;
void func() { cout << “CDocument::func()” << endl; Serialize();}
virtual void Serialize() { cout << “CDocument::Serialize() \n\n”; }
};

class CMyDoc : public CDocument
{
public:
int m_data2;
virtual void Serialize() { cout << “CMyDoc::Serialize() \n\n”; }
};

CMyDoc mydoc;
((CDocument)mydoc).func();
输出:CDocument::Serialize()
(不是子类重写函数的)原因:衍生对象通常都比基础对象大(指内存空间),因为衍生对象不但继承其基础类别的成员,又有自己的成员。那么所谓的upcasting(向上强制转型): (CDocument)mydoc,将会造成对象的内容被切割(objectslicing):这里写图片描述

静态成员:
不要把static 成员变量的初始化动作安排在类别的构造式中,因为构造式可能一再被调
用,而变量的初值却只应该设定一次。也不要把初始化动作安排在头文件中,因为它可
能会被包含许多地方,因此也就可能被执行许多次。你应该在实作档中且类别以外的任
何位置设定其初值。
设定static 成员变量初值时,不受任何存取权限的束缚。
static 成员变量的型别也出现在初值设定句中(例如:double SavingAccount::m_rate = 0.0075;),因为这是一个初值设定动作,不是一个数量指定(assignment)动作。事实上,static 成员变量是在这时候(而不是在类别声明中)才定义出来的。如果你没有做这个初始化动作,会产生联结错误:error LNK2001: unresolved external symbol “private: static double SavingAccount::m_rate”(?m_rate@SavingAccount@@2HA)

四种不同的对象生存方式(in stack、in heap、global、local static)

0 0
原创粉丝点击