c++ 知识点小结

1、类

    类是c代码中必不可少的一部分。大型项目中,cpp文件都有对应的头文件。在头文件中声明及部分定义类,方便类之间的继承、调用等。

    声明类的时候,需要注意的有,public,private,成员函数声明(需要函数类型,参数,后面加分号,不需要实现的大括号),inline关键字修饰的函数(类在调用该函数的时候,是嵌入,在类内没有声明为inline,在定义的时候添加了Inline,则也是嵌入使用)。

    在定义或使用类的成员函数的时候,需要添加::,如A::write()。

2、继承(多态)

    继承是为了增加代码的复用,同时可以增添新的功能。

    形式如:

class a:public A

{}

  条件:

      1、包含(include)A声明所在的头文件

      调用:

      1、当父类被继承,子类重新声明定义函数名相同,参数类型相同的成员函数时,当通过父类调用该函数名的函数,实际调用的是哪一个呢?

             根据有无虚函数(virtual 修饰)来判断,具体参考:   https://blog.csdn.net/u012273328/article/details/51173111      

3、重载

      重载是在相同作用域内,可以声明几个函数名相同,但是参数不同的函数,编译器通过将参数比较,选出最合适的函数。

4、修饰符(const,friend,inline)

  const:

              类:const 修饰的数据成员,不可修改,初始化位置只能在参数列表里。

                    const 修饰的成员函数,在函数参数之前时,只能访问同被修饰的类函数。

                    const 修饰类对象,是从对象的层面,不修改数据 只能调用const成员函数  (const 修饰函数,是从函数的层面,不修改数据)

                   参考博客:https://blog.csdn.net/fengyunzhenyu/article/details/79695516

     friend:

            友元分为友元函数和友元类,是为了方便访问。

            友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend;

            友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类,即在另一个类中friend该类。

     inline: 

            被修饰的函数本身短小,没有for,while等循环语句,且被频繁调用。编译器选择决定函数会不会被内联(替换,而不是调用地址接口)

5、指针

     指针是有类型、有地址的变量,地址里存的是要指向的地址。

        1、类 数据成员 函数成员
            成员类型 类名::*指针名 = &类名::成员名
            函数返回类型 (类名::*函数指针名)(参数列表) = &类名::成员函数名
        2、对象
             .* ->*
             对象.*数据成员指针
             对象指针->*数据成员指针     

     当需要在函数里改变多个参数,并用于后续使用时,可以在传进该函数前将这几个参数定义好,然后以传地址的形式传进来,对于该函数本身,定义时参数是取地址的形式,就相当于是预定义好的变量(地址相同,数据类型相同),函数执行完毕,变量修改保存完毕。

6、内联与宏

     都是替换,但是宏(#define)没有类型检查,内联函数有.

     宏不建议轻易使用,从项目安全等角度考虑。

7、结构体

      结构体内的变量可以类型不同;

      定义在头文件中,可以方便多个cpp文件使用。

8、全局与局域变量

      static、extern、auto

      extern 可以用来实现变量的全局性,当变量已经被定义过,在其他文件再使用时,可以使用extern 声明,extern 类型 变量;

      static 在类内部的表现,用来实现族类对象建的数据共享。在生成对象的时候,普通数据成员才有空间,而static成员在类声明的时候,就已经开辟了空间。

      static 数据成员,既属于类,也属于对象,但终归属于类

      static 作用域仅限于本文件

9、初始化与赋值

     初始化与赋值不是相等的。

     初始化的时候如果没有给赋值,之后赋值的时候需要对其包含的子对象逐个进行赋值。

posted on 2019-11-08 17:31  xiaoheizi  阅读(153)  评论(0编辑  收藏  举报