IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 暑期学习冲offer 8.6 -> 正文阅读

[C++知识库]暑期学习冲offer 8.6

今日学习:C++进阶day2部分

函数模板与模板函数

类型参数化,编写代码可以忽略类型

template<class T>

template<typename T>

template只对下面的第一个函数有效

1.自动类型推导

Myswap(a,b);

编译器根据你传的的值,进行类型自动推导

2.显式指定类型

Myswap<int>(a,b);

函数模板不能进行自动类型转换,必须严格类型匹配

函数模板和普通函数在一起调用规则:

  • 函数模板可以像普通函数那样被重载
  • C++编译器优先考虑普通函数
  • 如果函数模板可以产生一个更好的匹配,那么选择模板
  • 可以通过空模板实参列表的语法限定编译器只能通过模板匹配

模板函数实现原理

函数模板通过具体调用会生成一个模板函数,函数模板不能被调用


类模板

函数模板在调用的时候,可以自动类型推导

类模板必须显式指定类型

template<class T>
class Person{
public:
    Person(T id,T age){
        this->mId=id;
        this->mAge=age;
    }
    void  Show(){
        cout<<"ID:"<<mId<<"Age:"<<mAge<<endl;
    }

public:
    T mId;
    T mAge;
};

void test(){
    
    Person<int> p(10,20);   //显示指定类型
    p.show();

}


class subperson :public Person<int>       //继承父类要写清类型
{
};

template<class T>
class ssubperson : public Person<T>
{
};

类模板的头文件和实现写在一个文件里,命名为.hpp

预编译器index.cpp ---> index.i? --->编译器? index.s(汇编文件)---> 汇编器 index.obj --->链接器? index.exe


类型转换

static_cast? ? ? ? ? 一般转换

dynamic_cast? ? 通常在基类和派生类之间转换时使用

const_cast? ? ? ? ?主要针对const的转换

reinterpret_cast 用于进行没有任何关联之间的转换,比如一个字符指针转换为一个整型数

//static_cast 用于内置的数据类型,还有具有继承关系的指针或引用
int a=97;
char c=static_cast<char>(a);

class Animal{};
class Cat:public Animal{};
//父类指针转成子类指针或子转父
Animal* ani=NULL;
Cat* cat=static_cast<Animal*>(ani);


//dynamic_cast 转换具有继承关系的指针或引用,在转换前会进行对象类型安全检查
//只能将子类指针转换为父类指针


//const_cast 增加或者去除变量的const性
int a=10;
const int& b=a;    //b不能修改
int& c=const_cast<int&>(b);
c=20;     //a=20,b=20,c=20;

const int *p=NULL;
int* p2=const_cast<int*>(p);

int* p3=NULL;
const int* p4=const_cast<const int*>(p3);


//reinterpret_cast强制类型转换
Building* buid=NULL;
Animal* ani=reinterpret_cast<Animal*>(buid);

//函数指针转换
typedef void(*FUNC)(int,int)













异常机制

C++ 异常机制 是跨函数的

C++异常必须处理

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 11:49:05  更:2021-08-07 11:50:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/8 19:07:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码