07(C++二级)

1. 指向数组的指针      int(*P)[10]      的初始化🐮

2.内联函数(跳转)替代宏

3.虚析构:

  虚析构函数是为了避免内存泄露,而且是当子类中会有指针成员变量时才会使用得到的。也就说虚析构函数使得在删除指向子类对象的基类指针时可以调用子类的析构函数达到释放子类中堆内存的目的,而防止内存泄露的.

  

  

 4.  Cat c, * ptr = &c, arr[3], & cc = c;       一共调用了  4 次Cat的构造函数。      里面的c为一个c.    😇

5.模板函数

模板函数的调用:

  1.   函数名<模板实参表>模板函数实参表
  2.        函数名(模板函数实参表)

模板函数的定义:

template <模板函数形参表声明>
    返回类型 函数名(函数形参表)
    {
       …… //函数体
    }

 

模板实参的省略:

    在调用模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的渠道获得信息:从“模板实参表”(在“<”和“>”之间)或从模板“函数实参表”(在“(”和“)”之间),“模板实参表”的信息优先于“函数实参表”的信息。如果从后者得到的信息已经能够判断其中部分或全部虚拟类型参数所对应的实际类型,而且它们又正好是“模板形参表声明”中最后的若干参数,则在“模板实参表”中可以省略这几个参数。如果所有的模板实参都被省略了,则空表“<>”也可以省略。

    但在以下情况中,模板实参是不能省略的。

    ① 从模板“函数实参表”中获得的信息有矛盾。例如,当编译系统从某一个函数实参中获得的信息是虚拟类型参数T(假设为T)对应的实际类型为int,可是从另一个函数实参中获得的信息却是虚拟类型参数T对应的实际类型为double时,就产生了矛盾。T不可能同时为
int和double型,这将导致编译器无法找到匹配的函数模板的定义,编译时报错。解决这一问题的方法之一就是显示给出虚拟类型参数T对应的模板实参,强制T对应于int或是double。
    ② 虚拟类型参数用做函数的返回值类型,而且函数需要返回特定类型的值,而不管函数实参的类型是什么。在这种情况下,需要用模板实参强制虚拟类型参数对应于特定类型。
    ③ 虚拟类型参数没有出现在模板的“函数形参表”中。此时无法从模板的“函数实参表”中获取对应的信息,因而不能省略模板实参。(没有参数的意思)
    ④ 函数模板含有常规形参。常规参数是用具体的类型修饰符(如int、double、char*等)定义的,对应的实参必须是常量表达式。因此,常规参数的信息无法从模板的“函数实参表”中获得,调用模板函数时必须显示给出对应于常规参数的模板实参。

 6.指向类对象的指针释放要用 delete[] ptr;

  这样会同时调用类的析构函数进行释放。

 

posted @ 2022-09-22 17:59  这就叫做C++  阅读(50)  评论(0编辑  收藏  举报