C++基础知识day8
2018-03-27 15:47
176 查看
1.类模板// 模板类派生类
// 1、派生一个具体的类
class B:public A<int>
{
public:
B(int a, int b):A(a)
{ }
private:
int b;
};// 2、派生一个模板类
template <typename T, typename T2>
class C:public A<T>
{
public:
C(T a, T2 c):A(a)
{ }
private:
T2 c;
};
template <typename T>
class D:public A<int>
{
public:
C(int a, T d):A(a)
{ }
private:
T d;
};// 类模板对象作为函数参数传递
// 1、写一个确定具体的 模板类// 类模板使用必须要指明类型
2.类模板的使用// 1、类模板的成员函数在类的外部实现,则所有函数都要写成函数模板形式
// 2、在表明该函数属于哪个类的时候,要在类名后面加 <T>// 3、函数的返回值一定要加上 <T>
// 1、运算符重载的友元函数,需要在 函数名和形参列表之间加 <T>friend ostream& operator<< <T>(ostream& out, Complex<T> &c);
// 2.3 在函数名和形参列表之间加 <T> friend Complex<T> Sub <T>(Complex<T> &c1, Complex<T> &c2);
3.类模板中的static关键字不同类型的类模板对应的static成员也是不同的(不同的类),但相同类型的类模板的static成员是共享的(同一个类)
4.类型转换//static_cast : 普通数据类型之间的强转
//reinterpret_cast : 指针数据类型之间的转换
//dynamic_cast : 类层次之间数据类型的转换
//const_cast : 去掉变量的常量属性// 根据特殊的对象做一些特殊的事情
// dynamic_cast 将基类指针转换为派生类指针
// 1、如果这个基类指针指向确实是要转换的派生类类型的对象,返回指向这个对象的指针
// 2、如果这个基类指针指向的不是要转换的派生类类型的对象,返回的是空指针 NULL
5.异常// 1、异常是需要抛的 throw异常
// 2、异常是跨函数的
// 3、捕获到异常变量后的处理方式:1、收下,不让异常变量继续抛 2、将异常变量再抛出去
// 4、异常变量的捕获是要严格匹配类型的,不允许变量的隐式转换
// 将可能发生异常的语句放到 try 块中
// 1、没有异常发生,catch语句都不执行,程序从catch语句之后接着运行
// 2、有异常,匹配catch 类型,进入到相应的 catch语句执行,执行完后从catch语句之后接着运行
// 栈解旋:异常抛出到异常变量被接收,期间所有的栈上的变量都会被自动释放
6.异常变量的生命周期// 1、用一个普通变量去收抛出的异常对象,会调用拷贝构造函数,异常对象直到异常处理结束以后才被释放
// 2、用一个引用去接收抛出的异常对象,不会调用拷贝构造函数,异常对象到整个异常处理结束才释放
// catch(Error3 e)
// catch(Error3 &e) // 3、接收异常对象指针:
// a、如果是栈上的对象指针,则接收回来的时候栈上对象已经被释放,指针是无效指针
// b、如果是堆上的对象指针,必须手动调用delete释放,否则会造成内存泄露
// 1、派生一个具体的类
class B:public A<int>
{
public:
B(int a, int b):A(a)
{ }
private:
int b;
};// 2、派生一个模板类
template <typename T, typename T2>
class C:public A<T>
{
public:
C(T a, T2 c):A(a)
{ }
private:
T2 c;
};
template <typename T>
class D:public A<int>
{
public:
C(int a, T d):A(a)
{ }
private:
T d;
};// 类模板对象作为函数参数传递
// 1、写一个确定具体的 模板类// 类模板使用必须要指明类型
2.类模板的使用// 1、类模板的成员函数在类的外部实现,则所有函数都要写成函数模板形式
// 2、在表明该函数属于哪个类的时候,要在类名后面加 <T>// 3、函数的返回值一定要加上 <T>
// 1、运算符重载的友元函数,需要在 函数名和形参列表之间加 <T>friend ostream& operator<< <T>(ostream& out, Complex<T> &c);
// 2.3 在函数名和形参列表之间加 <T> friend Complex<T> Sub <T>(Complex<T> &c1, Complex<T> &c2);
3.类模板中的static关键字不同类型的类模板对应的static成员也是不同的(不同的类),但相同类型的类模板的static成员是共享的(同一个类)
4.类型转换//static_cast : 普通数据类型之间的强转
//reinterpret_cast : 指针数据类型之间的转换
//dynamic_cast : 类层次之间数据类型的转换
//const_cast : 去掉变量的常量属性// 根据特殊的对象做一些特殊的事情
// dynamic_cast 将基类指针转换为派生类指针
// 1、如果这个基类指针指向确实是要转换的派生类类型的对象,返回指向这个对象的指针
// 2、如果这个基类指针指向的不是要转换的派生类类型的对象,返回的是空指针 NULL
5.异常// 1、异常是需要抛的 throw异常
// 2、异常是跨函数的
// 3、捕获到异常变量后的处理方式:1、收下,不让异常变量继续抛 2、将异常变量再抛出去
// 4、异常变量的捕获是要严格匹配类型的,不允许变量的隐式转换
// 将可能发生异常的语句放到 try 块中
// 1、没有异常发生,catch语句都不执行,程序从catch语句之后接着运行
// 2、有异常,匹配catch 类型,进入到相应的 catch语句执行,执行完后从catch语句之后接着运行
// 栈解旋:异常抛出到异常变量被接收,期间所有的栈上的变量都会被自动释放
6.异常变量的生命周期// 1、用一个普通变量去收抛出的异常对象,会调用拷贝构造函数,异常对象直到异常处理结束以后才被释放
// 2、用一个引用去接收抛出的异常对象,不会调用拷贝构造函数,异常对象到整个异常处理结束才释放
// catch(Error3 e)
// catch(Error3 &e) // 3、接收异常对象指针:
// a、如果是栈上的对象指针,则接收回来的时候栈上对象已经被释放,指针是无效指针
// b、如果是堆上的对象指针,必须手动调用delete释放,否则会造成内存泄露
相关文章推荐
- C/C++学习笔记:基础知识9
- 自己总结C/C++的一些容易被遗忘的基础知识!
- C/C++基础知识:typedef用法小结
- C++学得再好,也无法凭这个找到好工作 (转) 注意基础知识的掌握!~
- C++的一些基础知识
- C++STL泛型编程基础知识讲解--------2015年2月3日
- C++基础知识(4)
- c++之基础知识(1)定义类的对象;析构函数和构造函数常用模板
- [C++ 面试基础知识总结] 类
- c++ 基础知识整理(二)
- QT最简单的程序执行过程分析(内含C++基础知识)
- Linux下使用Vim进行C/C++ 编程基础知识详解
- 计算机网络-C++基础知识,面试复习题
- C++容易被忽视的基础知识
- C++基础知识
- 【基础知识】C++指针知识
- (总结之mfc书最后附录)c++基础知识点-概念
- C++面向对象基础知识详解二
- 感觉还有好多的C++基础知识要去学习
- C++ 基础知识 (1)