• C++ 面向对象笔记


    C++面向对象

    • virtual只出现在声明,不出现在定义。

    • 派生类可以访问publicprotected成员,不可访问private成员

    • 对象之间不存在类型转换

    • 派生类向基类的类型转换只对指针和引用有效

    • 基类的引用或指针的静态类型和动态类型可能不一样。

    • 当通过基类的引用或者指针调用虚函数时,在运行时才确定下来调用的虚函数的版本,如果指针或引用绑定的是派生类的对象,那会运行派生类的虚函数。当通过对象调用虚函数时,在编译期就可以确定。

    • 继承虚函数最好在声明结尾写上override

    • 派生类可以看作和基类的连体婴儿,是一个扩充,但对基类的访问有所限制。

    • 虚函数的默认实参按调用的静态类型的默认实参决定。

    • 避免对虚函数动态绑定:使用作用域运算符:DerivedP->Base::f();。通常情况下是派生类调用其基类的虚函数版本时需要使用,基类版本通常完成所有继承层次中类型的共同任务,而派生类中的虚函数只需定义和自身密切相关的操作。

    • 在声明分号前写= 0代表纯虚函数。有纯虚函数的类是抽象类,不允许定义对象。

    • 在Quote的继承体系中增加Disc_quote类是重构,重构负责将操作或数据从一个类转移到另一个类,即使重构了继承体系,引用了Bulk_quote或Quote的代码也无需改变。

    • 派生类的类作用域嵌套在基类的作用域里,重名会将基类中的成员覆盖,而不会重载即使是参数不一样。当然可以使用作用域运算符访问被覆盖的成员Base::covered_member

    • 如果派生类的函数名与基函数的虚函数名相同,会将其隐藏而不是派生一个新的虚函数。

    • 如果想重载基类中的函数,需要在派生类中using Base::f;,然后再定义派生类的f()

    • 析构函数要定义成虚函数,防止一个Base类指针指向派生类,delete的时候选错析构函数的版本。

    • 向一个基类的容器传入派生类对象,只会将其基类的部分传入,调用虚函数的版本是基类的版本。好的做法是定义成基类的智能指针的容器,传入容器时派生类的指针会转换成基类的指针,但他指向的还是派生类对象,指针具有动态类型,调用虚函数会调用派生类版本。

    • delctype(f)获得函数类型,用decltype(f)*获得函数指针

      multiset<int, decltype(com)*> st(com);
      
  • 相关阅读:
    发光二极管
    续流二极管作用及工作原理
    python backtrace注意事项
    docker tips
    direct stdin and stdout
    python skill
    mysql comments
    python dict
    python list and tuple
    Python library
  • 原文地址:https://www.cnblogs.com/hellozhangjz/p/16436801.html
Copyright © 2020-2023  润新知