您的位置:首页 > 编程语言 > C语言/C++

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释放,否则会造成内存泄露
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: