C++重点知识总结

 

1. C++ Virtual关键字详解:
 https://www.cnblogs.com/xd502djj/archive/2010/09/22/1832912.html

补充:子类覆盖父类的非virtual方法(如foo)。父类引用指向子类对象。调用的foo函数为父类foo函数。
  子类覆盖父类的virtual方法(如foo)。父类引用指向子类对象。调用的foo函数为子类foo函数。

虚拟继承:Virtual public;

 https://blog.csdn.net/blank__box/article/details/78239208

2. C++/C相互调用?

 https://blog.csdn.net/weiwangchao_/article/details/4681813

3. 引用。

 https://www.cnblogs.com/duwenxing/p/7421100.html

4. 创建类的方法;

class Base{  public:Base(int a ,int b){XXX} }

Base base1 = {3,5};

Base base2{3,5};

Base *p = new Base{3,5};

5. 关键字static的作用

    1.  函数体内 static 变量的作用范围为该函数体,不同于 auto 变量, 该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值

    2.  在模块内的 static 全局变量可以被模块内所有函数访问,但不能被模块外其他函数访问

    3.  在模块内的static 函数只可被这一模块内的其他函数调用,这个函数的使用范围被限制在声明它的模块内

    4.  在类的static 成员变量属于整个类所拥有,对类的所以对象只有一份拷贝

    5.  在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的 static 成员变量   

     介绍它最重要的一条:隐藏。(static函数,static变量均可) --> 对应上面的2、3项
        当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。
        举例来说明。同时编译两个源文件,一个是a.c,另一个是main.c。

   //a.c
    char a = 'A';               // global variable
    void msg()
    {
      printf("Hello\n");
    }
  //main.c
   int main()
   {
     extern char a;       // extern variable must be declared before use
     printf("%c ", a);
     (void)msg();
     return 0;
   }

       程序的运行结果是:

     A Hello

      为什么在a.c中定义的全局变量a和函数msg能在main.c中使用?

      前面说过,所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。此例中,a是全局变量,msg是函数,并且都没有加static前缀,

        因此对于另外的源文件main.c是可见的。

     如果加了static,就会对其它源文件隐藏。例如在a和msg的定义前加上static,main.c就看不到它们了。

     利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏

6. C++中基类的析构函数为什么要用virtual虚析构函数

父类引用指向子类对象时,通过父类来删除子类对象,如果是非虚析构函数,则不会调用到子类的析构函数。

    https://www.cnblogs.com/liushui-sky/p/5824919.html

7.内联函数 (inline)

https://blog.csdn.net/u011327981/article/details/50601800

8.友元函数

http://www.cnblogs.com/BeyondAnyTime/p/2535305.html

你可能感兴趣的:(C/C++)