C++之函数中实现类、调用总结(二百五十四)

news2024/12/23 5:17:08

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:理解C++之函数中实现类与调用实例用法

2.在函数中实现类的作用

在C++中在函数中实现类可以具有多种作用,包括但不限于:

  1. 封装性和局部性:在函数中实现类可以将类的定义限制在函数的作用域内,从而保持类的封装性和局部性。这样可以避免在整个程序中暴露类的细节,使得类的实现对于其他部分来说是不可见的,从而保持代码的模块化和封装。

  2. 临时对象:在某些情况下,如果一个类只在一个函数中使用,将该类定义在函数中可以减少全局名称空间的污染,同时避免在整个项目中引入不必要的类定义。

  3. 内部实现细节隐藏:在函数中实现类可以将类的具体实现细节隐藏起来,只暴露对外部代码有意义的接口,从而提高代码的安全性和可维护性。

  4. 临时辅助类:有时候我们可能需要临时定义一些辅助类或者数据结构,在函数中定义这些类可以避免在整个项目中引入不必要的类定义。

  5. 模板函数内部类:在模板函数内部定义类可以提供更灵活的方式来处理模板函数的特化。

  6. 简化代码:在特定函数中定义类可以使代码更加紧凑和可读,因为相关的类定义直接与使用它们的代码放在一起。

虽然在函数中实现类可以带来一些好处,但需要注意的是这样做也可能会导致一些问题,比如难以维护、可读性下降、类的复用性下降等。因此,在实际开发中需要根据具体情况权衡利弊。

3.代码实例

1.在函数中定义类并创建类的实例:

#include <iostream>
using namespace std;

void useClassInFunction1() {
    class Person {
    public:
        string name;
        int age;
    };

    Person person1;
    person1.name = "Alice";
    person1.age = 30;
    cout << "Name: " << person1.name << ", Age: " << person1.age << endl;
}

int main() {
    useClassInFunction1();
    return 0;
}

2. 在函数中定义类并创建多个类的实例:

#include <iostream>
using namespace std;

void useClassInFunction2() {
    class Car {
    public:
        string brand;
        string model;
    };

    Car car1, car2;
    car1.brand = "Toyota";
    car1.model = "Corolla";
    car2.brand = "Honda";
    car2.model = "Civic";

    cout << car1.brand << " " << car1.model << endl;
    cout << car2.brand << " " << car2.model << endl;
}

int main() {
    useClassInFunction2();
    return 0;
}

3. 在函数中定义类并使用构造函数初始化类的实例:

#include <iostream>
using namespace std;

void useClassInFunction3() {
    class Rectangle {
    public:
        int width;
        int height;
        Rectangle(int w, int h) : width(w), height(h) {}
    };

    Rectangle rect(10, 5);
    cout << "Width: " << rect.width << ", Height: " << rect.height << endl;
}

int main() {
    useClassInFunction3();
    return 0;
}

4. 在函数中定义类并使用成员函数:

#include <iostream>
using namespace std;

void useClassInFunction4() {
    class Circle {
    public:
        double radius;
        double area() {
            return 3.14 * radius * radius;
        }
    };

    Circle circle;
    circle.radius = 5.0;
    cout << "Area of the circle: " << circle.area() << endl;
}

int main() {
    useClassInFunction4();
    return 0;
}

5. 在函数中定义类并使用静态成员:

#include <iostream>
using namespace std;

void useClassInFunction5() {
    class BankAccount {
    public:
        static double interestRate;
    };

    BankAccount::interestRate = 0.05;
    cout << "Interest rate: " << BankAccount::interestRate << endl;
}

int main() {
    useClassInFunction5();
    return 0;
}

6. 在函数中定义类并使用友元函数:

#include <iostream>
using namespace std;

void useClassInFunction6() {
    class Rectangle {
    private:
        int width, height;
    public:
        Rectangle(int w, int h) : width(w), height(h) {}
        friend void printArea(Rectangle rect);
    };

    void printArea(Rectangle rect) {
        cout << "Area: " << rect.width * rect.height << endl;
    }

    Rectangle rectangle(4, 5);
    printArea(rectangle);
}

int main() {
    useClassInFunction6();
    return 0;
}

7. 在函数中定义类并使用模板:

#include <iostream>
using namespace std;

template <class T>
void useClassInFunction7() {
    class Box {
    public:
        T data;
    };

    Box<int> intBox;
    intBox.data = 10;
    cout << "Data in intBox: " << intBox.data << endl;

    Box<string> strBox;
    strBox.data = "Hello";
    cout << "Data in strBox: " << strBox.data << endl;
}

int main() {
    useClassInFunction7();
    return 0;
}

8.在函数中定义静态成员函数

#include <iostream>
using namespace std;

void load_system_driver() {

  class MatchFile {
  public:
    static std::string find() {
      const char* const searchPaths[] = {
#if defined(__LP64__)
	"/vendor/lib64/egl",
	"/system/lib64/egl"
#else
	"/vendor/lib/egl",
	"/system/lib/egl"
#endif
      };

      std::string retbuf;
      for (auto dir : searchPaths) {
	printf("xxx--------------->%s, %s(), line = %d, dir = %s\n",__FILE__,__FUNCTION__,__LINE__,dir);
	retbuf.assign(dir);
      }
      return retbuf;
    }
  };

  std::string absolutePath = MatchFile::find();
  printf("xxx--------------->%s, %s(), line = %d, abs_path = %s\n",__FILE__,__FUNCTION__,__LINE__,absolutePath.c_str());
}

int main(){
  load_system_driver();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1185407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL之表的增删改查

目录 表的增删改查1.Create1.1 单行数据 全列插入1.2 多行数据 指定列插入1.3 插入否则更新1.4 替换 2.Retrieve1.1 SELECT 列全列查询指定列查询查询字段为表达式为查询结果指定别名结果去重 1.2 WHERE 条件普遍使用NULL 的查询结果排序筛选分页结果 3.Update对查询到的结果…

vue3+setup 解决:this.$refs引用子组件报错 is not a function

一、如果在父组件中以下四步都没问题的话&#xff0c;再看下面步骤 二、如果父组件引用的是index页面 请在 头部加上以下代码 &#xff08;如果是form页面请忽略这一步&#xff09; <template> <a-modalv-model:visible"visible"title"头部名称&…

MySQL库的库操作指南

1.创建数据库 一般格式&#xff1a;create database (if not exists) database1_name,database2_name...... 特殊形式&#xff1a; create database charset harset_name collate collate_name 解释&#xff1a; 红色字是用户自己设置的名称charset&#xff1a;指定数据…

照片处理软件 DxO FilmPack 7 mac中文版软件介绍

DxO FilmPack 7 mac是一款照片处理软件&#xff0c;专为摄影后期制作而设计。该软件来自法国的DXO公司&#xff0c;它可以在数码影像上模拟胶卷的颜色、对比度、颗粒感等。DxO FilmPack 7提供了多种胶卷颜色效果&#xff0c;包括7种正片胶卷颜色、9种单色照片胶卷颜色、5种负片…

71 内网安全-域横向网络传输应用层隧道技术

目录 必备知识点&#xff1a;1.代理和隧道技术区别?2.隧道技术为了解决什么?3.隧道技术前期的必备条件? 演示案例:网络传输应用层检测连通性-检测网络层ICMP隧道Ptunnel使用-检测利用传输层转发隧道Portmap使用-检测,利用传输层转发隧道Netcat使用-检测,利用,功能应用层DNS隧…

浮点数保留指定位数的小数,小数位自动去掉多余的0

通过DecimalFormat.format可以按照指定的格式格式化数据。 public class test { public static void main(String[] args) { DecimalFormat dnew DecimalFormat(“#.#”);//在有小数的情况下留一位小数&#xff0c;默认是四舍五入 BigDecimal decimalnew BigDecimal(“3.14159…

SQL入门语句

MySQL和SQL的区别是什么&#xff1f;之间是什么关系&#xff1f; SQL&#xff08;Structured Query Language&#xff09;是用于管理和操作关系型数据库&#xff08;RDBMS&#xff09;的标准语言。SQL还可以用于这些RDBMS&#xff1a;MySQL、Oracle、Microsoft SQL Server、Pos…

React进阶之路(二)-- 组件通信、组件进阶

文章目录 组件通信组件通信的意义父传子实现props说明子传父实现兄弟组件通信跨组件通信Context通信案例 React组件进阶children属性props校验组件生命周期 组件通信 组件通信的意义 组件是独立且封闭的单元&#xff0c;默认情况下组件只能使用自己的数据&#xff08;state&a…

0成本LLM微调上手项目,⚡️一步一步使用colab训练法律LLM,基于microsoft/phi-1_5,包含lora微调,全参微调

项目地址 &#xff1a;https://github.com/billvsme/train_law_llm ✏️LLM微调上手项目 一步一步使用Colab训练法律LLM&#xff0c;基于microsoft/phi-1_5 。通过本项目你可以0成本手动了解微调LLM。 nameColabDatasets自我认知lora-SFT微调train_self_cognition.ipynbsel…

P1131 [ZJOI2007] 时态同步

Portal. 先找出树上以 S S S 为起点最长的一条链&#xff0c;然后让其他链的长度都和该链对齐即可。 维护每个结点 x x x 的子树最长链 d max ⁡ ( x ) d_{\max}(x) dmax​(x)&#xff0c;则每次 DFS 求出最长链之后调整对齐的代价为 d max ⁡ ( x ) − ( d max ⁡ ( s o …

Java算法(二):数组元素求和(元素个位和十位不能是 7 ,且只能是偶数)

java算法&#xff08;二&#xff09; 需求&#xff1a; ​ 有这样一个数组&#xff1a; 元素是&#xff1a;{68, 27, 95, 88, 171, 996, 51, 210} ​ 求出该数组中满足要求的元素和 ​ 要求是&#xff1a; 求和的元素各位和十位都不能是 7 &#xff0c;并且只能是偶数 packa…

机器学习中的假设检验

正态性检验相关分析回归分析 所谓假设检验&#xff0c;其实就是根据原假设来构造一种已知分布的统计量来计算概率&#xff0c;根据概率值大小来判断能否拒绝原假设&#xff0c;从而得到一种结论。假设检验的过程就是&#xff0c;构造一个原假设成立条件下的事件A&#xff0c;计…

如何实现单病种上报的多院区/集团化/平台联动管理

背 景 米软售前人员在了解客户单病种上报的相关需求中发现&#xff0c;部分医院分为本部、分部或总院、分院等多个院区&#xff0c;各院区需共用一套系统&#xff1b;部分医院与其他兄弟医院隶属于同一集团医院&#xff0c;全集团需统一部署&#xff1b;部分市/区卫健委要求全…

【Node.js入门】1.3 开始开发Node.js应用程序

1.3 开始开发Node.js应用程序 学习目标 &#xff08;1&#xff09;熟悉开发工具Visual Studio Code的基本使用&#xff1b; &#xff08;2&#xff09;掌握Node.js应用程序的编写、运行和调试的基本方法。 构建第一个 Node.js应用程序 代码 const http require("htt…

RabbitMQ 消息中间件 消息队列

RabbitMQ1、RabbitMQ简介2、RabbitMQ 特点3、什么是消息队列4、RabbiMQ模式5、集群中的基本概念 单实例安装RabbitMQ安装依赖安装erlang安装rabbitmq开启rabbitmq的web访问界面添加用户修改配置文件重启服务浏览器访问Rabbit-test rabbitMQ集群准备工作&#xff08;三台&#x…

AM@向量代数@向量基本概念和向量线性运算

文章目录 abstract向量的基本概念向量向量的坐标分解式和坐标&#x1f47a;向量的模向量的长度(大小)&#x1f47a;零向量单位向量&#x1f47a;方向向量非零向量的单位向量正规化向量夹角&#x1f47a; 向量方向角和向量间夹角投影几何描述向量的线性运算向量的加减运算向量的…

【STM32 开发】| INA219采集电压、电流值

目录 前言1 原理图2 IIC地址说明3 寄存器地址说明4 开始工作前配置5 程序代码1&#xff09;驱动程序2&#xff09;头文件3) 测试代码 前言 INA219 是一款具备 I2C 或 SMBUS 兼容接口的分流器和功率监测计。该器件监测分流器电压降和总线电源电压&#xff0c;转换次数和滤波选项…

jmeter+ant实现的接口自动化测试

jmeterANT接口自动化测试框架 项目说明 本框架是一套基于jmeterAntExcelPython而设计的数据驱动接口自动化测试框架&#xff0c;jmeter 作为执行器&#xff0c;Ant 作为构建工具&#xff0c;进行构建测试&#xff0c;本框架无需你使用代码编写用例&#xff0c;测试用例存储在…

基于CSP的运动想象EEG分类任务实战

基于运动想象的公开数据集&#xff1a;Data set IVa (BCI Competition III)1 数据描述参考前文&#xff1a;https://blog.csdn.net/qq_43811536/article/details/134224005?spm1001.2014.3001.5501 EEG 信号时频空域分析参考前文&#xff1a;https://blog.csdn.net/qq_4381153…

算法竞赛——数论(一),数论内容的介绍,基础数论

文章目录 一&#xff0c; 数论学习路线的介绍和相关建议1&#xff0c;建议学习人群 &#xff1a;2&#xff0c;建议学习时长3&#xff0c;学习路线的介绍1&#xff0c;基础数论2&#xff0c;组合数学3&#xff0c;计算几何 二&#xff0c;基础数论第一部分 —— 快速幂和快速幂…