C++ 中 开发 相关资料,存档! 2024/7/27

资料来源: 通义灵码生成

           2024:保留在此,以备不时之需    

在C++中,结构体(struct)、命名空间(namespace)、工程组织和类定义都是重要的概念,它们各自在代码设计和管理中扮演着不同的角色。下面是一些关于这些主题的实用技巧:

结构体(Structs)

数据封装:结构体可以用来封装相关的数据成员,提供一种组合不同类型数据的方式。

成员访问控制:虽然结构体默认成员是public的,但你可以使用访问修饰符private、protected和public来控制成员的可访问性。

添加方法:与类相似,结构体也可以包含方法,使其成为具有状态和行为的实体。

初始化列表:使用初始化列表来初始化结构体成员,特别是在成员包含复杂类型或需要特殊构造的情况下。

使用explicit关键字:如果结构体有单参数构造函数,使用explicit关键字可以防止隐式转换。

// 定义一个学生信息的结构体 

struct Student { std::string name; // 学生的名字 

int age; // 学生的年龄 

double gpa; // 学生的平均成绩 

// 构造函数 

Student(std::string n, int a, double g) : name(n), age(a), gpa(g) {} // 成员函数,打印学生信息 

void print_info() const { std::cout << "姓名: " << name << ", 年龄: " << age << ", GPA: " << gpa << std::endl; } };

命名空间(Namespaces)

避免命名冲突:命名空间可以用来隔离不同的代码段,防止全局命名冲突。

使用using声明:通过using namespace std;或其他命名空间,可以简化代码中的命名,但应谨慎使用以避免潜在的命名冲突。

局部命名空间:可以在函数或类中定义局部命名空间,以进一步减少命名冲突。

匿名命名空间:使用匿名命名空间可以创建仅在当前编译单元中可见的符号,这有助于防止无意中的全局变量泄露。

// 定义一个命名空间,包含一些数学函数

 namespace MathUtils {

// 计算两个整数的和 

int add(int a, int b)

 { return a + b; } }

 // 使用命名空间中的函数 

int main() { using namespace MathUtils;

// 引入MathUtils命名空间 

int result = add(5, 3); std::cout << "5 + 3 = " << result << std::endl; return 0; }

工程组织

模块化:将代码分割成多个文件,每个文件负责一部分功能,这有助于代码的维护和复用。

头文件和源文件分离:通常将接口定义放在.h(或.hpp)头文件中,实现细节放在.cpp(或.cc)源文件中。

依赖管理:合理安排文件间的依赖关系,避免循环依赖,使用预处理器指令(如#ifndef, #define, #endif)来防止头文件被重复包含。

构建系统:使用Makefile、CMake、MSBuild等工具来自动化编译过程,这有助于大型项目的管理和构建。

工程组织通常涉及到文件和目录的结构,例如:

src/ - 源代码文件

main.cpp:

// main.cpp - 主程序 

#include "math.h"

#include <iostream>

int main() { using namespace Math; // 引入Math命名空间 int product = multiply(4, 5); std::cout << "4 * 5 = " << product << std::endl; return 0; }

math.cpp

include/ - 头文件

math.h

CMakeLists.txt - 构建脚本

math.h:

// math.h - 数学函数的头文件 

#ifndef

 MATH_H #define MATH_H namespace Math

{ // 计算两个整数的乘积 int multiply(int a, int b); }

#endif // MATH_H

类定义

继承和多态:利用继承来创建类层次结构,使用虚函数和抽象基类来支持多态。

封装:隐藏类的实现细节,仅暴露必要的接口给外界。

构造函数和析构函数:适当地使用构造函数初始化对象,使用析构函数清理资源。

运算符重载:重载运算符可以使类的行为更像内置类型,提高代码的可读性和表现力。

智能指针:使用智能指针(如std::unique_ptr和std::shared_ptr)来自动管理动态分配的内存,避免内存泄漏。

// 定义一个银行账户的类 

class BankAccount

{

public:

BankAccount(std::string owner, double balance) : owner_(owner), balance_(balance) {}

// 存款 void deposit(double amount) { balance_ += amount; }

// 取款 bool withdraw(double amount)

{

if (amount <= balance_) { balance_ -= amount; return true;

 }

return false;

}

// 打印账户信息 void print_info()

const { std::cout << "账户持有人: " << owner_ << ", 余额: " << balance_ << std::endl; }

private: std::string owner_;// 账户持有人 double balance_; // 账户余额 };

// 使用BankAccount类 

int main() {

BankAccount account("张三", 1000.0); account.deposit(500.0); account.print_info();

if(account.withdraw(200.0)) { account.print_info(); }

else

{ std::cout << "余额不足" << std::endl; } return 0;

}

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

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

相关文章

2. 卷积神经网络无法绕开的神——LeNet

卷积神经网络无法绕开的大神——LeNet 1. 基本架构2. LeNet 53. LeNet 5 代码 1. 基本架构 特征抽取模块可学习的分类器模块 2. LeNet 5 LeNet 5: 5 表示的是5个核心层&#xff0c;2个卷积层&#xff0c;3个全连接层.核心权重层&#xff1a;卷积层、全连接层、循环层&#xff…

093、Python操作Excel生成统计图表

在Excel里做统计表是我们经常会做的一件事情。我们也可以通过编程的方式操作Excel生成统计图表。 下面是官方的一个很有参考价值的案例&#xff1a; from openpyxl import Workbook from openpyxl.chart import BarChart, Reference from copy import deepcopywb Workbook(w…

生活实用英语口语“拆迁”用英文怎么说?柯桥成人学英语到蓝天广场

● 1. “拆迁”英语怎么说&#xff1f; ● 01. 其实国外也有拆迁 但国外的拆迁&#xff0c;只管拆 不管安置&#xff0c;你爱去哪去哪 英文可以说 housing removal 02. 但我们中国的“拆迁” 既管“拆”也管“迁” &#xff08;还是中国人幸福~&#xff09; 英文可以说 housin…

车载录像机给公交公司管理带来哪些好处

一、引言 随着社会的快速发展&#xff0c;公共交通日益成为人们出行的主要方式之一。对于公交公司而言&#xff0c;如何有效管理车辆及司乘人员&#xff0c;确保行车安全、服务质量以及乘客的合法权益&#xff0c;成为一项重要的任务。本文将从以下几个方面详细阐述管理效果的…

排查C++软件异常的常见思路与方法(实战经验总结)

目录 1、概述 2、常用的C++异常排查思路与方法 2.1、IDE调试 2.1.1、Debug和Release下的调试 2.1.2、VS附加到进程调试 2.1.3、Windbg附加到进程调试 2.2、添加日志打印 2.3、分块注释代码 2.4、数据断点 2.5、历史版本比对法 2.6、Windbg静态分析与动态调试 2.6.1…

7.24 补题

C 小w和大W的决斗 链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 小w和大W为了比出谁更聪明。决定进行一场游戏。游戏内容如下: 两人轮流操作&#xff0c;小w先进行操作&#xff0c;每次操作可以选择下列两个其一: 选择数组中的一…

websocket通信问题排查思路

websocket通信问题排查思路 一、websocket连接成功&#xff0c;但数据完全推不过来。 通过抓包发现&#xff0c;是回包时间太长超过了1分钟导致的。这种通常是推送数据的线程有问题导致的。 正常抓包的情况如下&#xff1a; 二、大量数据可以正常推送成功&#xff0c;不定时…

【机器学习】机器学习之多变量线性回归-Multiple_Variable_Soln

引言 扩展数据结构和之前开发的例程&#xff0c;以支持多个特征。有几个例程被更新&#xff0c;使得实验看起来有些冗长&#xff0c;但实际上只是对之前的例程进行了小的调整&#xff0c;因此快速回顾是可行的 文章目录 引言一、多变量线性回归1.1 目标1.2 工具 二、问题陈述2.…

【因数之和】python求解方法

输入两个整数A和B&#xff0c;求A的B次方的因子和&#xff0c;结果对1000000007取模。 def mod_exp(base, exp, mod):result 1while exp > 0:if exp % 2 1:result (result * base) % modbase (base * base) % modexp // 2return resultdef sum_of_factors(n):total 0…

【无标题】shell脚本的基本命令+编写shell脚本

shell脚本 一.shell基础 1.shell概念 2.shell脚本 3.shell脚本编写注意事项 二.编写shell脚本 1.编写一个helloworld脚本&#xff0c;运行脚本 [rootshell ~]# vim helloworld.sh #!/bin/bash //声明 echo "hello world!" ls -lh /etc/ 运行脚本(四种方式)&…

c/c++的内存管理(超详细)

一、c/c的内存分布 这是操作系统中对于内存的划分&#xff1a; 我们重点掌握以下几个区域即可&#xff1a; 1.栈 (调用函数会建立栈帧) 2.堆(动态开辟的空间) 3.数据段(静态区)&#xff1a;存放静态变量以及全局变量 4.代码段 (常量区) 先来看看一个题目&#xff1a; int…

[物联网专题] RS485继电器输出之Modbus控制流程和时间优化分析

在工控领域&#xff0c;往往需要大量的输入信号和输出控制信号&#xff0c;以接收各种传感信号和产生输出控制动作。由于PLC的输出触点数量有限&#xff0c;或者因为更多输出触点的PLC价格昂贵&#xff0c;性价比并不高。为了解决这个矛盾&#xff0c;基于MODBUS协议的继电器IO…

数据结构:基础概念

一、相关概念 概念 相互之间存在一种或多种特定关系的数据元素的集合。 逻辑结构 集合&#xff1a;所有数据在同一个集合中&#xff0c;关系平等。 线性&#xff1a;数据和数据之间是一对一的关系 树&#xff1a; 一对多 图&#xff1a;多对多 物理结构(在内存当中的存储关系)…

AC695x BLE OTA调试

SDK版本&#xff1a;AC695N_soundbox_sdk_release_3.1.0AC695x SDK支持BLE OTA升级&#xff0c;使用杰理公版APP升级即可。SDK需要做一些调整&#xff0c;板级文件需要增加如下配置&#xff0c;使能OTA升级 #define TCFG_APP_BT_EN 1#define APP_UPDATE_EN …

Three.js动效(第09辑):令人瞠目结舌的交互效果,沉浸式体验

three.js能够实现各种3D动态效果&#xff0c;不禁有小伙伴问了&#xff0c;实现这些效果到底有什么意思&#xff0c;其实最大的意义就是给用户沉浸式的体验&#xff0c;瞬间专注用户注意力。 Three.js能够带来以下沉浸式体验&#xff1a; 3D虚拟现实体验&#xff1a; 使用Th…

MATLAB-bode图编程

num[1 1];den [2 1];tf(num,den)bode(tf(num,den));hold on

PHP8.3.9安装记录,Phpmyadmin访问提示缺少mysqli

ubuntu 22.0.4 腾讯云主机 下载好依赖 sudo apt update sudo apt install -y build-essential libxml2-dev libssl-dev libcurl4-openssl-dev pkg-config libbz2-dev libreadline-dev libicu-dev libsqlite3-dev libwebp-dev 下载php8.3.9安装包 nullhttps://www.php.net/d…

Bert文本分类和命名实体的模型架构剖析

文章目录 介绍Bert模型架构损失计算方式BertForSequenceClassificationBertForTokenClassification Bert 输出结果剖析例子 参考资料 介绍 文本分类&#xff1a;给一句文本分类&#xff1b; 实体识别&#xff1a;从一句文本中&#xff0c;识别出其中的实体&#xff1b; 做命名…

由于误操作原因丢失了照片?6 款 Android 照片恢复应用程序可能有帮助

由于意外删除&#xff0c;软件故障&#xff0c;系统崩溃&#xff0c;恢复出厂设置或任何其他原因&#xff0c;您可能会丢失Android手机中的照片。无论如何&#xff0c;您仍然有很大的机会借助Android照片恢复应用程序恢复照片。有很多应用程序提供恢复支持&#xff0c;但并非所…

zeal 开发者离线文档工具

zeal是一款程序开发者不可或缺的离线文档查看器 下载地址 官网地址&#xff1a; windows版csdn下载&#xff1a;https://zealdocs.org/download.html#windows windows版官网下载&#xff1a;https://zealdocs.org/download.html#windows 下载压缩版&#xff0c;解压即用相对…