c++学习14(完) 2020-02-03

内容

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++的学习在这里就结束了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值