• *** C++知识点点滴记录


    1.在C++中,只要不明确指定是public,默认是private

    2.virtual关键字主要是实现动态绑定。要触发动态绑定,必须满足两个条件:

        第一,指定为虚函数;

        第二,通过基类类型的引用或指针调用。

    只要基函数定义了virtual,继承类的该函数也就具有virtual属性

    纯虚函数为后代类提供可覆盖的接口,但这个类中的版本决不会调用。
    含有(或继续)一个或多个纯虚函数的类是抽象基类,抽象基类不能实例化!

    类对象的声明顺序与调用析构函数的顺序相反。如下,函数退出时先执行obj2析构函数,后执行obj1的。

    int main() 
    {
        classA  obj1, obj2;
    
        return 0;
    }

    当类中没有定义复制构造函数时,编译器会自动创建一个默认按位复制的复制构造函数,它只会简单地把两个对象的成员变量做赋值运算,包括指针变量,这可能导致多次释放指针所指向空间的错误。

    以下两个观点都是误解:

    a)   任何类如果没有定义构造函数,则编译器会帮我们合成一个默认构造函数。

    b)   合成默认构造函数会对类中的每一个数据成员进行初始化。

     

    只有在编译器需要默认构造函数来完成编译任务的时候,编译器才会为没有任何构造函数的类合成一个默认构造函数,或者是把这些操作插入到已有的构造函数中去。

    编译器需要默认构造函数的四种情况,总结起来就是:

    a)   调用对象成员或基类的默认构造函数。

    b)   为对象初始化虚表指针与虚基类指针。

    void func1 () const {}

    这里const是指定该函数不会改变任何变量的值。

    private成员变量,在构造函数中是可以被直接引用的,在初始化列表中或者构造函数体内都可以。

    #ifdef __cplusplus
    extern "C" {
    #endif
    void display (void)
    {
    printf ("This is a C code segment!
    ");
    }
    #ifdef __cplusplus
    }
    #endif

    选择private继承还是组合的原则:

      尽可能使用组合,万不得已才用私有继承。

    new一个对象时, 只为类中成员变量分配空间, 对象之间共享成员函数

    g++为每个有虚函数的类在构造函数末尾中隐式的添加了为vptr赋值的操作

    初始化列表的初始化顺序

    初始化列表的初始化顺序与变量声明的顺序一致,而不是按照出现在初始化列表中的顺序。

    给变量赋值使它所有位都为1

    int i = ~0;

    #define 声明一年中有多少秒

    #define SECONDS_PER_YEAR (365*24*60*60UL)

    UL: unsigned long 无符号长整形

    UL要跟数字连写,不能写到括号外面,否则编译错误

    map与hashmap的区别

    1.map底层数据结构是红黑树;hashmap底层数据结构是hash table

    2.map优点是自动排序;hashmap优点是各项操作的平均时间复杂度接近常数

    3.map是C++ STL一部分,而hashmap则还不是

  • 相关阅读:
    1006. 求和游戏
    1004. 西西弗斯式的命运
    1024. 排序
    1005. 数独
    kafka的基本操作
    kafka安装
    spring boot 使用redis 及redis工具类
    ArrayDeque类的使用详解
    设计模式随笔之——工厂方法模式
    转:Android随笔之——使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
  • 原文地址:https://www.cnblogs.com/superrunner/p/10099206.html
Copyright © 2020-2023  润新知