【C++】类模板、模板类、函数模板、模板函数、重载、重写、赋值、转换

本文详细解释了C++中的类模板、函数模板以及它们的应用,强调了重载和重写的概念,同时讨论了赋值和类型转换的重要性,包括自动转换和强制类型转换的使用与注意事项。
摘要由CSDN通过智能技术生成

模板,类是形容词,重点是模板。
函数模板,函数是形容词,重点是模板。
类模板和函数模板重点是模板。
模板类,模板是形容词,重点是类。
模板函数,模板是形容词,重点是函数。
所以,
模板类是根据类模板实例化出来的具体类。
模板函数是根据函数模板实例化出来的具体函数。

模板

一个类中的某个成员变量的数据类型不能确定,或某个成员函数的参数类型或返回值类型不能确定,

此时,可用任意类型(系统预定类型和用户自定义的类型)代替而声明的类,称为类模板。

模板类

用实际的数据类型替换类模板中的数据类型参数T后所生成的类。例如,将T替换为int,就得到了一个模板类。

实际上,模板类是类模板的一个实例。

函数模板

函数模板定义了一个通用的函数结构描述,其中某些类型或值是未确定的,这些未确定的地方用模板参数表示。

函数模板可用于生成多个具体的函数。

模板函数

模板函数是根据函数模板实例化出的具体函数。

总结:函数模板是一个通用的函数描述,可以用于生成多个具体的函数;而模板函数则是根据函数模板实例化出来的具体函数。

在C++中,**重载(Overloading)重写(Overriding)**是两个重要的概念,它们都与函数的行为有关,但应用于不同的场景。

重载(Overloading)

重载是指在同一作用域内,可以定义多个名称相同但参数列表不同的函数。这些函数的返回类型可以相同也可以不同。重载允许我们使用相同的函数名来执行不同的操作,根据传递的参数类型和数量来确定调用哪个函数。

例如:

void print(int i) {
    std::cout << "Int: " << i << std::endl;
}

void print(double d) {
    std::cout << "Double: " << d << std::endl;
}

int main() {
    print(5);    // 调用第一个print函数
    print(5.5);  // 调用第二个print函数
    return 0;
}

在这个例子中,print函数被重载了两次,一次接受int参数,另一次接受double参数。

重写(Overriding)

重写是面向对象编程中的一个概念,主要用在继承中。当派生类(子类)中有一个与基类(父类)中虚函数签名(函数名和参数列表)相同的函数时,我们说派生类重写了基类中的函数。重写的目的是允许派生类改变基类中的虚函数的行为。

例如:

class Base {
public:
    virtual void show() {
        std::cout << "Base class show()" << std::endl;
    }
};

class Derived : public Base {
public:
    void show() override {  // 使用override关键字表明这是一个重写的函数
        std::cout << "Derived class show()" << std::endl;
    }
};

int main() {
    Base* ptr = new Derived();
    ptr->show();  // 输出 "Derived class show()",尽管ptr是Base类型,但调用的是Derived中的show()
    delete ptr;
    return 0;
}

在这个例子中,Derived类重写了Base类中的show函数。当我们通过一个指向Derived对象的Base类指针调用show函数时,调用的是Derived类中的show函数,这就是多态性的一个例子。

总结:

  • 重载(Overloading)是在同一作用域内使用相同的函数名但不同的参数列表来定义多个函数。
  • 重写(Overriding)是在继承关系中,派生类提供与基类虚函数相同签名的函数来改变或扩展基类函数的行为。

赋值

在 C++ 中,赋值和转换在编程中是两个重要的概念。

赋值是将一个值或对象复制到另一个变量或对象的过程。

在 C++ 中,赋值操作使用等号(=)进行。例如:

int a = 5;  // 将5赋值给变量a

转换

转换(也称为类型转换或强制类型转换)是将一个数据类型转换为另一个数据类型的过程。

在C++中,转换可以是自动的(隐式的)或手动的(显式的)。

  • 自动转换:当两种类型兼容时,编译器会自动进行转换。例如,当你将一个较小的整数类型(如int)赋值给一个较大的整数类型(如long)时,int值会自动转换为long值。
  • 手动转换(或强制转换):当你需要明确地将一个类型转换为另一个类型时,你需要使用强制类型转换。在C++中,这通常通过使用类型转换运算符(如static_cast、dynamic_cast、reinterpret_cast和const_cast)来完成。例如:
double d = 3.14;
int i = static_cast<int>(d);  // 将double类型的d转换为int类型的i

需要注意的是,强制类型转换可能会导致数据丢失或截断,因此在使用时应谨慎。

同时,类型转换的规则和行为可能会因编程语言和上下文的不同而有所差异。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值