内容
1.异常
2.内部类(嵌套类)
3.类型转换
4.函数模板、类模板
一.异常
异常是人为定义的一种状况。
说白了,就是你自己规定啥时候给你报错
1.abort()
这个就是直接报错的函数,直接用就行。
2.try和catch
这个用的比较多,头文件是#include<cstdlib>
使用示例
#include<iostream>
#include<cstdlib>
using namespace std;
void fun(int a)
{
if (3 == a)
{
throw a;
}
}
int main()
{
try
{
fun(3);
}
catch (int b)
{
cout << b << endl;
}
system("pause");
return 0;
}
try:检测异常
throw:将异常抛出
catch:处理异常
也可以有多个catch,这些catch之间构成重载关系
当catch()中()不知道什么类型时,写...,就类似于default
注意:抛出对象时,要用引用或者指针(比如cFather&或者cFather),以避免拷贝构造。
二.内部类/嵌套类
这个其实就是类里面还有一个类,类似于结构体嵌套。
代码示例如下
class cOut
{
public:
int a;
public:
class cIn
{
public:
int b;
};
};
1.内部类访问外部类
不能直接使用外部类的数据成员,应用对象调用
class cOut
{
public:
int a;
cOut()
{
a = 1;
}
public:
class cIn
{
public:
int b;
void funIn()//通过这个函数实现内部类对外部类成员的使用
{
cOut o;
cout << o.a << endl;
}
};
};
2.外部类使用内部类
仍然需要对象 点 出来
class cOut
{
public:
int a;
cOut()
{
a = 1;
}
public:
class cIn
{
public:
int b;
};
public:
cIn i;//首先需要在外部类创建一个内部类
};
int main()
{
cOut ou;
ou.i.b;//然后 点 出来即可
system("pause");
return 0;
}
现阶段,掌握这么多,足矣。
三.类型转换
之前我们用的是旧式类型转换,而这里要说的是新式类型转换
这个知识点用的不多,而且不好记,用到的时候就百度即可
共四种
static_cast
const_cast
dynamic_cast
reinterpret_cast
四.函数模板
函数重载是把函数名统一,而函数模板是类似于把函数体也统一。意义:是泛型编程思想的一个例子
代码示例如下
template<typename T>//T能转换成任意类型,比如int char double等。T只是一个名字
void fun(T a)
{
cout << a << endl;
}
int main()
{
fun(3);
fun('b');
system("pause");
return 0;
}
注意:函数模板的作用域是紧挨着的下边的代码段
函数模板的具体化
当参数不再是char,int这种,而是比如结构体这种,就不能这样写了,而应该再写一个函数体,来专门针对这个结构体参数的,这个就是函数模板的具体化。
它的执行顺序在普通的函数模板(也就是上面这种)之前。
代码示例如下
struct Node
{
int b;
};
template<typename T>
template<> void fun<Node>(Node no)//这是形式
{
cout << no.b << endl;
}
int main()
{
Node no;
no = { 12 };
fun(no);
system("pause");
return 0;
}
当然原版函数,
void fun(int a)
{
}
也可以和上面函数模板和函数模板具体化同时存在。
调用顺序是 首先是原版函数,再是函数模板具体化,再是函数模板
五.类模板
类模板其实和函数模板大同小异
使用示例
template<typename T>
class cFather
{
public:
T a;
cFather(T t)
{
a = t;
}
void show()
{
cout << a << endl;
}
};
int main()
{
cFather<int> fa(1);
fa.show();
system("pause");
return 0;
}
注意:①参数可以有默认值,比如这里可以设置 T = int,就类似于函数参数默认值(这个只有类模板才能设置默认值)
②只要外面出现那个类(在这里是cFather)就必须有模板参数列表,在这里也就是cFather后面必须有尖括号<>里面写上参数,而且这些参数必须一一对应,多个cFather后面的参数保持一致
说明
c++还有一部分内容是stl,由于和后面要学的Java里面部分内容相似,综合考虑过后,决定开始学Java,c++的学习在这里就结束了