基础知识点 | 1017_短路原则,类模板和函数模板等

0.硬背


(√) #include命令行不能出现在程序文件的中间


1.短路原则


对于A || B,如果 A 为真,B 就不执行。

对于A && B,如果 A 为假,B就不执行。



2.类模板和函数模板


函数模板

语法:

template<typename T>
函数声明或定义

总结:

  • 函数模板利用关键字 template
  • 使用函数模板有两种方式:自动类型推导、显示指定类型
  • 模板的目的是为了提高复用性,将类型参数化

类模板

语法:

template<typename T>
类

总结:

  • 类模板没有自动类型推导的使用方式
  • 类模板在模板参数列表中可以有默认参数
  • 当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型


3.static_cast 和 dynamic_cast

static_cast 在编译时期转换

dynamic_cast 在运行时期转换



4.派生类中数据的初始化


基类中的 private 成员数据在派生类中需要通过调用基类中的构造函数来进行初始化


一个例题

class A {
...
private:
   int &a;
};
class B : public A {
...
private:
     int a;
public:
     const int b;
     A c;
     static const char* d;
     A* e;
};

常量成员引用成员自然是要初始化的,问题就在这static成员。

static成员是不允许在类内初始化的,除了const,那么static const 成员是不是在初始化列表中呢?

答案是NO

一是static属于类,它在未实例化的时候就已经存在了,而构造函数的初始化列表嘞,只有在实例化的时候才执行。

二是static成员不属于对象。我们在调用构造函数自然是创建对象,一个跟对象没直接关系的成员要它做什么呢

还有一个问题就是上面那个仁兄说的,.需要初始化的数据成员是对象(继承时调用基类构造函数) ;这个显然是不对的。下面代码能够很好说明了这个问题。c需要初始化不是因为它是类对象,是因为他的成员有引用。



5.类模板的继承(看不懂)


模板类的继承包括四种:

1.(普通类继承 模板类

2.(类模板继承了普通类(非常常见))

3.(类模板继承类模板)

4.(类模板继承 模板类,即继承模板参数给出的基类)

注:模板类是类模板的一个实例。即,类型参数T具体化。


posted @ 2021-10-17 23:03  不是勇士  阅读(96)  评论(0)    收藏  举报