C++泛型编程函(数模板+类模板)

对于C++泛型编程,我们可以使用模板来实现。在C++中,我们可以使用函数模板和类模板来实现泛型编程。

C++函数模板

C++函数模板是一种特殊的函数,它可以像参数一样的方式接受一种数据类型,并使代码对于任何数据类型都可用。其语法格式如下:

template <typename T>
return_type function_name (arguments) 
{
   // function code here
}
  • typename T 表示通用数据类型,我们可以使用任何类型的名称替换这里的T。
  • 然后是函数的返回类型和参数列表。
  • 在函数定义中,可以使用typename T替换实际数据类型。

接下来,让我们来看一个例子,用C++函数模板实现两个数相加。

#include<iostream>

using namespace std;

// 函数模板
template <typename T>
T add(T a, T b) {
    return a + b;
}

int main() {
    cout<< add<int>(2, 3) << endl;  // 输出5
    cout<< add<float>(1.2, 2.3) << endl; // 输出3.5
    cout<< add<char>('A', 'B') << endl; // 输出131
    return 0;
}

C++类模板

C++类模板也是一种特殊的类,它可以像参数一样的方式接受一种数据类型,并使代码对于任何数据类型都可用。语法格式如下:

template <typename T>
class class_name
{
    // class code here
};

接下来,让我们来看一个例子,用C++类模板实现一个计算器。这个计算器可以用于整数、浮点数和复数的运算。

#include<iostream>

using namespace std;

//类模板
template <typename T>
class Calculator {
public:
    T add(T x, T y) {
        return x + y;
    }

    T subtract(T x, T y) {
        return x - y;
    }

    T multiply(T x, T y) {
        return x * y;
    }

    T divide(T x, T y) {
        if (y != 0) return x / y;   
        throw "Division by zero";
    }
};

int main() {
    // 整数计算器
    Calculator<int> intCalc;
    cout<< intCalc.add(2, 3) << endl;  // 输出5
    cout<< intCalc.subtract(2, 3) << endl; // 输出-1
    cout<< intCalc.multiply(2, 3) << endl; // 输出6
    cout<< intCalc.divide(6, 3) << endl; // 输出2

    // 浮点数计算器
    Calculator<float> floatCalc;
    cout<< floatCalc.add(1.2, 2.3) << endl; // 输出3.5
    cout<< floatCalc.subtract(1.2, 2.3) << endl; // 输出-1.1
    cout<< floatCalc.multiply(1.2, 2.3) << endl; // 输出2.76
    cout<< floatCalc.divide(4.8, 2.4) << endl; // 输出2

    // 复数计算器
    // 复数的运算需要重载运算符,这里就不做示例了

    return 0;
}

以上就是C++函数模板和类模板的基本用法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++泛型编程函(数模板+类模板) - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言双向链表的表示与实现实例详解

    C语言双向链表的表示与实现实例详解 一、概述 双向链表(doubly linked list)是一种链式存储结构,与单向链表类似,但每个节点不仅包含了一个指向下一个节点的指针,还包含了一个指向前一个节点的指针。这样可以方便地在链表的前后进行遍历和操作。 本篇攻略将详细讲解C语言双向链表的表示与实现。包括链表的结构定义、操作实现和两个示例说明。 二、结构定义 …

    C 2023年5月23日
    00
  • C++单例模式为何要实例化一个对象不全部使用static

    C++的单例模式是一种常用的设计模式,用于确保一个类在应用程序中只存在一个实例,以及提供全局访问该实例的机制。 在C++的单例模式实现中,通常将单例类的构造函数设为私有的,以禁止其他代码直接构造其实例。然后,提供一个静态方法,用于获得该类的唯一实例。该方法将根据需要创建一个实例,并将其保存在静态成员变量中。每次调用该方法时,都会返回该唯一实例。这种实现方式的…

    C 2023年5月22日
    00
  • 如何在java中正确使用注释

    下面我将详细讲解如何在Java中正确使用注释。 为什么需要注释 注释是代码中一个非常重要且必不可少的组成部分,它可以对代码进行完善的解释和说明,提高代码的可读性、可维护性和可扩展性。同时,注释还可以对代码的某些问题或待优化之处进行标注,为日后的程序优化和代码重构提供参考。 Java注释类型 Java中支持三种方式的注释: 1.单行注释 单行注释可用于在一行代…

    C 2023年5月22日
    00
  • C++代码实现逆波兰表达式

    下面我来给您详细讲解C++代码实现逆波兰表达式的完整攻略。 什么是逆波兰表达式 逆波兰表达式,也叫后缀表达式,在数学、计算机科学中是一种存储和计算算术表达式的方法,其中每个运算符都跟在它的操作数之后。逆波兰表达式不需要括号来标识操作符的优先级。这种语法结构可避免我们所谓的”运算符优先级”。 举个例子,中缀表达式:1 + 2 * 3 – 4 / 2 的逆波兰表…

    C 2023年5月24日
    00
  • C指针原理教程之Ncurses介绍

    下面是关于“C指针原理教程之Ncurses介绍”的完整攻略。 Ncurses介绍 什么是Ncurses? NCurses 是新版 PDCurses 的一个分支 (PDCurses 的原版是依据 System V 版本的 Curses 改写而成)。Ncurses 是一个在 Linux 和 BSD 上运行的开源库,可用于创建终端用户界面 (TUI: Text U…

    C 2023年5月23日
    00
  • C++编程中的const关键字常见用法总结

    C++编程中的const关键字常见用法总结 const的基本概念 const是C++编程中非常常见的一个关键字,它用于定义常量并告知编译器该变量不可被修改。在程序运行过程中,const类型的变量的值是不可被修改的,这可以确保变量的值不会意外改动。const不仅可以用于普通的变量定义,还可以用于函数参数、函数返回值以及类的属性和方法。 const变量的定义和使…

    C 2023年5月23日
    00
  • JSON 和 JavaScript eval使用说明

    让我来为大家详细讲解关于”JSON 和 JavaScript eval使用说明”的攻略。 1. 什么是 JSON? JSON 是一种轻量级的数据交换格式,广泛应用于客户端和服务端之间的数据传输。它的全称是 JavaScript Object Notation,是一种基于 JavaScript 语法的数据格式。JSON 可以表示对象、数组、字符串、数字、布尔值…

    C 2023年5月23日
    00
  • 适合新手小白DEV C++的使用方法

    下面将为您详细讲解“适合新手小白DEV C++的使用方法”的完整攻略。 简介 DEV C++是一款免费、开源的C/C++ IDE,适用于初学者和中级开发人员开发C/C++应用程序。它具有易于使用、功能强大、跨平台等特点。本篇攻略将详细讲解如何使用DEV C++进行C/C++程序的编写、调试、编译和运行。 下载与安装 首先,你需要在官网上下载和安装DEV C+…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部