基础知识点 | 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具体化。

浙公网安备 33010602011771号