zoukankan      html  css  js  c++  java
  • 《深入浅出MFC》第二章 C++的重要性质

    把对象的属性和行为归纳整理,组织成一个类别称为类。类包括成员变量和成员函数,分别对应对象的属性和行为。

    把数据声明为private,只提供特定的接口供外界访问,这称为面向对象的封装。

    派生类与基类是IsKindOf的关系。

    每个对象都有各自的成员变量,但成员函数却是对象共享的,成员函数的参数列表中默认包含隐藏的this指针,成员函数通过该指针处理对象各自的数据。成员函数中对数据的访问会自动使用this指针进行访问。

    当通过指针调用成员函数时(非虚拟函数),所调用成员函数的版本由指针的类型而定而与指针所指的对象类型无关。

    把操作提升到抽象中定义是为了实现一般化的程序设计,即它可以把现在的与未来的情况通通纳入考虑。我们需要通过一般化的对象来处理对象实际类型的情况。这种性质就是多态,需要虚函数来完成。

    程序代码完全一样,执行结果却完全不同,这就是虚函数的妙用。如果预计在派生类中重新定义某个成员函数,则在基类中将该函数定义为虚函数。

    相同的指令却调用了不同的函数,这种性质就是多态。对虚函数的调用无法在编译时判断调用的具体函数,只有到运行时才能判断,这称为动态绑定或后期绑定,对于非虚函数的调用,在编译时就转换为一个固定地址的调用,这称为前期绑定或静态绑定。

    如果基类中某个虚函数什么也不做,并且根本不应该被调用,只是提供一个多态的约定,这时把虚函数定义成纯虚函数,在定义后面添加=0。拥有纯虚函数的类是一种抽象类,抽象类不能被实例化。如果派生类没有重写基类中的纯虚函数,则该派生类也是抽象类。抽象类不能产生出对象实例,但是可以拥有指向抽象类的指针。

     动态绑定通过虚函数表实现,每个对象都包含一个指向虚函数表的指针。

    当使用强制类型转换把派生类对象转换成基类对象时,会调用基类的拷贝构造函数并只拷贝派生类对象中基类包含的成员。

    static成员变量不属于对象的一部分,而属于类的一部分。不要在构造函数中或头文件中设定静态成员的初始值,可以在其他任何位置设定初始值,设定初始值时不受访问权限的限定,实际上静态成员是在设定初始值的时候才被定义出来,设定初始值的语法double Class::member=2。

    如果static成员变量为privete,可以通过static的成员函数来存取static成员变量。static成员函数不能访问non-static的成员变量,因此static成员函数也不隐藏包含指向对象的this指针。

    四种不同的对象生存方式,全局对象(全局对象一定是静态对象),局部静态对象,局部对象(在堆栈中分配内存)以及通过new产生的局部对象(在堆中产生对象)。

    MFC支持动态创建,即反序列化。

    C++支持异常处理,通过异常处理可以实现从异常处直接跳到异常处理代码。通过try、catch、throw实现异常处理逻辑。

    C++支持function的模板,也支持class的模板,模板可以使数据类型也可以像参数一样传递,因此可以实现一般性的算法和数据类型的实现部分区分开。在Template Function和Template Class中类型参数一定要满足在function中和class中参与的运算符,否则会出现未知的错误。

    直到程序使用template function或template class时编译器才能为其生成目标代码,如果在多个文件中使用了同一个Template并且数据类型也相同,在链接时将删除相同的生成类型。

  • 相关阅读:
    boost::ASIO的异步方式
    C++ 类构造函数初始化列表
    C++11 shared_ptr(智能指针)详解
    C/C++中静态成员变量和静态成员函数的含义与不同用法
    静态局部变量
    GDB入门教程之如何使用GDB启动调试
    Qt的QWaitCondition了解一下吧
    Qt信号量QSemaphore认识一下
    瞧一瞧Qt的QMutex
    Qt的读写锁QReadWriteLock要怎么玩?
  • 原文地址:https://www.cnblogs.com/jefflee/p/6359856.html
Copyright © 2011-2022 走看看