当前位置: 首页 > news >正文

C++笔记

文章目录

      • 模板类
    • 函数
      • 什么是友元函数?
      • 什么是内联函数?
    • VECTOR
    • 哈希表
    • 队列
    • 映射与解除映射
      • mmap()
      • munmap
    • 可变参数 va_start()-va_send()
      • vsnprintf()
    • C/C++异常处理
    • list
    • 红黑树

基类、父类、顶层类、抽象类
子类、派生类

模板类

在C++中,模板类(Template Class)是一种通用的类模板,可以根据不同的数据类型生成具体的类。模板类允许将类的定义与实际使用分离,提供了代码复用和泛型编程的方式。

模板类的语法形式如下:

template <typename T>
class ClassName {// 类成员和方法
};

其中,template 是模板声明的开始部分,T 是一个占位符类型,表示在实例化模板时将被替换为具体的数据类型。T 可以根据需要自定义,比如使用 typename 或 class 关键字来指定类型参数。

通过使用模板类,可以创建适用于不同数据类型的对象,而无需为每个特定数据类型编写单独的类定义。例如,以下是一个模板类 Stack 的示例代码:

template <typename T>
class Stack {
private:T* stackArray;  // 数据存储数组int top;        // 栈顶指针int capacity;   // 栈的容量public:Stack(int size) : capacity(size), top(-1) {stackArray = new T[capacity];}~Stack() {delete[] stackArray;}void push(const T& item) {if (top == capacity - 1) {// 栈已满// 扩展栈的容量或抛出异常...} else {stackArray[++top] = item;}}T pop() {if (top == -1) {// 栈为空// 抛出异常或返回默认值...} else {return stackArray[top--];}}// 其他栈操作方法...
};

在上述示例中,Stack 是一个模板类,使用 typename T 作为类型参数。在模板类的成员函数中,可以使用 T 表示具体的数据类型。

通过实例化模板类,可以创建不同类型的栈对象,如 Stack、Stack 等。编译器会根据实际使用情况自动进行类型推导,生成对应的具体代码。

Stack<int> intStack(10);
intStack.push(42);
int poppedItem = intStack.pop();Stack<double> doubleStack(5);
doubleStack.push(3.14);
double poppedItem = doubleStack.pop();

模板类的优点是可以提供通用和灵活的代码,适用于多种数据类型。它能够在编译时进行类型检查,并减少代码冗余。模板类广泛应用于容器类(如向量、链表、队列、映射等)、算法和数据结构的实现。

需要注意的是,模板类的定义通常直接放在头文件中,因为编译器需要在每个使用模板类的地方生成相应的代码。

函数

什么是友元函数?

在C++中,友元函数(friend function)是在类的声明中被声明为友元的非成员函数。友元函数可以访问类的私有成员和受保护成员,即使它们不是类的成员。通过友元函数,我们可以允许其他函数或类直接访问另一个类的私有或受保护成员。

下面是一些关于友元函数的特点和用途:

友元函数的声明通常出现在类的内部,但不是类的成员函数。它可以在类的任何地方进行声明,例如在公共、私有或保护部分。

友元函数的定义必须在类外部进行,与类的定义分开。

友元函数在其定义中使用类的对象作为参数来访问类的成员。

友元函数被声明为友元后,它就可以直接访问该类的私有成员和受保护成员,而无需通过对象调用。

友元函数不继承,也不属于类的成员,因此不能被派生类继承。

友元函数对于需要操作类的私有数据或实现与该类紧密相关的功能的函数非常有用。例如,在重载运算符时,可以使用友元函数来直接访问类的私有成员并执行相应的操作。另一个例子是,如果你想实现一个函数,该函数需要访问多个类的私有成员以执行某些操作,那么你可以将该函数声明为这些类的友元函数。

下面是一个简单的示例,展示了友元函数的使用:

#include <iostream>class MyClass {
private:int data;public:MyClass(int value) : data(value) {}friend void printData(const MyClass& obj);
};void printData(const MyClass& obj) {std
http://www.lryc.cn/news/240570.html

相关文章:

  • python-opencv 培训课程笔记(1)
  • 【C++初阶】STL详解(七)Stack与Queue的模拟实现
  • 校园报修抢修小程序系统开发 物业小区报修预约上门维修工单系统
  • 【Android】Hilt比Android好在哪里
  • 计算方法 期末总结
  • 【面试】jvm中堆是分配对象存储的唯一选择吗
  • 音视频同步笔记 - 以音频时间为基
  • JavaScript 原始数据类型和对应的对象类型(内置对象)之间的关系
  • 报错For debugging consider passing CUDA_LAUNCH_BLOCKING=1.
  • whisper使用方法
  • 通过easyexcel实现数据导入功能
  • Springboot_文件下载功能(前端后端)
  • Vue框架学习笔记——v-bind数据单向绑定和v-model数据双向绑定
  • 将对象转成URL参数
  • 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法
  • 超级武器!深入LoadRunner性能测试流程及极速分析结果!
  • 解决requests库进行爬虫ip请求时遇到的错误的方法
  • 大语言模型领域的重要术语解释
  • 无需公网IP,使用内网穿透实现公网访问本地OpenWRT管理界面
  • 利用 docker 实现JMeter分布式压测
  • Sentinel 分布式系统
  • Cookie、Session、CBV加装饰器的三种方法
  • 【高级渗透篇】网络安全面试
  • 【Flink】Process Function
  • 【源码分析】zeebe actor模型源码解读
  • python3实现类似expect shell的交互式与SFTP的脚本
  • java游戏制作-飞翔的鸟游戏
  • NodeMCU ESP8266构建Web Server网页端控制设备
  • 搭建区块链
  • Python通过selenium调用IE11浏览器报错解决方法