C++函数重载与模板要点

基础知识不谈了,主要写些重点。
重载函数的参数个数,参数类型,参数顺序三者中必须至少有一种不同。

class不可省略

template<class T1,T2>是错误的,T2前也需要加class

继承的类前也需要写template

其实是可以不用template的,但是不用的话就需要在继承的基类的尖括号里注明类型,总之无论是具体类型还是模板,都是需要注明类型的。

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

template<class T>  //类外定义模板
class Animal{
public:
    void Jiao(){
        cout << mAge << "岁动物在叫!" << endl;
    }
public:
    T mAge;
};

template<class T>
class Cat : public Animal<T>{};//继承

int main(void)
{   
    Cat<int> cat;
    return 0;
}

模板类的外部实现

模板类的内部定义没什么好说的,在类前价格template就行。而在类模板外部实现的时候,如下


template<class T>   //外部实现,构造函数没有返回类型
Person<T>::Person(T age, T id){
    this->mID = id;
    this->mAge = age;
}

不要滥用友元+模板的组合

因为有些复杂,不符合普通规则

重载与const

顶层const区别不了形参。如

int func(int);
int func(const int );//错误,重复声明

int func(int*);
inr func(int* const);//错误,重复声明。

如果形参是某种类型的指针或引用,可以通过区分指向的是常量对象还是非常量对象实现函数重载,此时的const是底层的

int func(int&);
int func(const int &);//新函数,作用于常量引用,const是底层的

int func(int *);
int func(const int* );//新函数,作用于指向常量的指针,const是底层的

即编译器可以通过实参是否是常量来推断应该调用哪个函数。

重载的作用域

茅厕每行的同名函数会把外层的同名函数隐藏,哪怕形参类型不一样。而且变量也会把外层函数隐藏掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值