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

C++ 类及函数原型详解

一、引言

        在C++ 编程中,类(Class)是面向对象编程的核心概念之一,它是一种用户自定义的数据类型,封装了数据和操作数据的函数(成员函数)。函数原型则为函数的声明提供了必要的信息,让编译器在编译阶段就了解函数的参数和返回值类型,从而保证函数调用的正确性。理解类和函数原型的工作机制,对于编写高效、可靠的C++ 程序至关重要。

二、C++ 类的定义与结构

2.1 类的定义语法

        在C++ 中,使用  class  关键字来定义类,其基本语法如下:

class ClassName {

private:

    // 私有成员变量和函数,只能在类内部访问

    data_type member_variable1;

    data_type member_variable2;

    return_type private_function();

public:

    // 公有成员变量和函数,可以在类外部通过对象访问

    data_type public_variable;

    return_type public_function();

protected:

    // 保护成员变量和函数,可被派生类访问

    data_type protected_variable;

    return_type protected_function();

};

2.2 类成员的访问控制

- private(私有):类的私有成员只能在类内部被访问和修改,外部无法直接操作。这种访问控制机制有助于保护数据的安全性和完整性。

- public(公有):类的公有成员可以在类外部通过对象进行访问和调用,常用于提供类的接口,方便外部使用类的功能。

- protected(保护):保护成员对派生类可见,允许派生类继承和使用,同时限制外部直接访问,常用于实现类的继承和多态特性 。

2.3 类的成员函数

       类的成员函数是定义在类内部或与类相关联的函数,用于操作类的成员变量。成员函数分为两种类型

- 普通成员函数:可以访问类的所有成员(私有、公有、保护),通过对象调用。

class MyClass {

private:

    int data;

public:

    void setData(int value) {

        data = value;

    }

    int getData() {

        return data;

    }

};

- 静态成员函数:属于类本身,而不是类的对象,通过类名直接调用,只能访问类的静态成员。

class MyClass {

private:

    static int staticData;

public:

    static int getStaticData() {

        return staticData;

    }

};

int MyClass::staticData = 0;

三、函数原型

3.1 函数原型的作用

       函数原型是对函数的声明,它告诉编译器函数的名称、参数列表和返回值类型,其语法格式为:

return_type function_name(parameter_list);

函数原型的主要作用是:

1. 编译期检查:让编译器在编译阶段检查函数调用的参数个数、类型是否匹配,避免运行时错误。

2. 模块化编程:在大型项目中,函数原型使得函数定义和调用可以分离,提高代码的可读性和可维护性。

3.2 函数原型示例

// 函数原型声明

int add(int num1, int num2);

// 函数定义

int add(int num1, int num2) {

    return num1 + num2;

}

// 函数调用

int result = add(5, 3);

3.3 函数原型与默认参数

      C++ 允许在函数原型中设置默认参数,这样在调用函数时,如果没有传递相应的参数,就会使用默认值。

// 函数原型声明,带有默认参数

int multiply(int num1, int num2 = 1);

// 函数定义

int multiply(int num1, int num2) {

    return num1 * num2;

}

// 函数调用,只传递一个参数,第二个参数使用默认值1

int result1 = multiply(4);

// 传递两个参数

int result2 = multiply(4, 5);

四、类的成员函数原型

4.1 成员函数原型声明与定义分离

       在实际编程中,为了使代码结构清晰,常将类的声明和成员函数的定义分开。类声明放在头文件( .h  或  .hpp )中,成员函数定义放在源文件( .cpp )中。

// 头文件 MyClass.h

class MyClass {

private:

    int data;

public:

    void setData(int value); // 成员函数原型声明

    int getData();

};

// 源文件 MyClass.cpp

#include "MyClass.h"

void MyClass::setData(int value) {

    data = value;

}

int MyClass::getData() {

    return data;

}

4.2 内联成员函数

      对于短小的成员函数,可以使用  inline  关键字声明为内联函数,提高函数调用效率。内联函数的定义通常放在头文件中。

class MyClass {

private:

    int data;

public:

    inline void increment() { // 内联成员函数

        data++;

    }

    int getData() {

        return data;

    }

};

五、总结

      C++ 类和函数原型是构建复杂程序的基础。类通过封装数据和行为,实现了面向对象编程的核心特性;函数原型则为函数调用提供了明确的接口规范。熟练掌握类的定义、成员访问控制、成员函数的使用,以及函数原型的声明和作用,能够帮助开发者编写出结构清晰、可维护性强的C++ 代码。在实际项目中,合理运用这些概念,结合继承、多态等特性,可进一步提升程序的灵活性和扩展性。

相关文章:

C++ 类及函数原型详解

一、引言 在C 编程中,类(Class)是面向对象编程的核心概念之一,它是一种用户自定义的数据类型,封装了数据和操作数据的函数(成员函数)。函数原型则为函数的声明提供了必要的信息,让编…...

深度学习小记(包括pytorch 还有一些神经网络架构)

这个是用来增加深度学习的知识面或者就是记录一些常用的命令,会不断的更新 import torchvision.transforms as transforms toPIL transforms.ToPILImage()#可以把tensor转换为Image类型的 imgtoPIL(img) #利用save就可以保存下来 img.save("/opt/data/private/stable_si…...

声音分离人声和配乐base,vocals,drums -从头设计数字生命第6课, demucs——仙盟创梦IDE

demucs -n htdemucs --two-stemsvocals 未来之窗.mp3 demucs -n htdemucs --shifts5 之.mp3demucs -n htdemucs --shifts5 -o wlzcoutspl 未来之窗.mp3 伴奏提取人声分离技术具有多方面的重大意义,主要体现在以下几个领域: 音乐创作与制作 创作便利…...

深度探索多模态数据:从声音到图像的奇妙世界

深度探索多模态数据:从声音到图像的奇妙世界 在多模态深度学习的旅程中,我们不仅要了解不同数据形式的融合策略,还需要熟悉各种数据类型的特性。今天,我们将探索两种常见但极具价值的模态:音频数据和医学CT扫描。 音…...

【数据可视化-32】全球住房市场分析(2015-2024 年)数据集可视化分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

JAVA---面向对象(下)

重生之我开始补知识第三集 1.标准 JavaBean 要求: 1)类名需要见名知意 2)成员变量使用private修饰 3)至少提供两个构造方法 a.无参构造方法 b.带全部参数的构造方法 4)成员方法 a.提供每一个成员变量对应的 …...

FPGA(现场可编程门阵列)笔记

*编程语言 - [Verilog]:硬件描述语言,语法风格类似于C语言,用于数字电路的设计。 - [SystemVerilog]:扩展自Verilog,增加了面向对象编程等特性,语法更接近于C,适用于复杂系统设计。 - [VHDL]:另一种硬件描述语言&…...

DAX Studio将PowerBI与EXCEL连接

DAX Studio将PowerBI与EXCEL连接 具体步骤如下: 第一步:先打开一个PowerBI的文件,在外部工具栏里打开DAXStudio,如图: 第二步:DAXStudio界面,点击Advanced选项卡-->Analyze in Excel&#…...

使用spring boot vue 上传mp4转码为dash并播放

1.前端实现 <template><div class"video-upload"><el-uploadclass"upload-demo"action"/api/upload":before-upload"beforeUpload":on-success"handleSuccess":on-error"handleError":show-file-…...

深入理解指针 (1)

1.内存和地址 1.1内存 1.1.1内存的使用和管理 &#xff08;1&#xff09;内存划分为一个个的内存单元&#xff0c;每个内存单元的大小是1个字节&#xff0c;一个内存单元可以存放8个bit。 &#xff08;2&#xff09;每个内存单元有一个编号&#xff0c;内存单元的编号在计…...

Leetcode98、230:二叉搜索树——递归学习

什么是二叉搜索树&#xff1a;右子树节点 > 根节点 > 左子树节点&#xff0c; 二叉搜索树中的搜索&#xff0c;返回给定值val所在的树节点 终止条件为传进来的节点为空、或者节点的值 val值&#xff0c;返回这个节点&#xff1b; 单程递归逻辑&#xff1a;定义一个resu…...

4/25 研0学习日志

Python学习 python 4个常用的数据容器 list dict tuple set list 列表中数据类型可以不一样 构造方式 mylist["xxx","xxxx"] 获取数据方式 mylist[1] mylist[:4] mylist[-1:] 添加数据 mylist.append() mylist.extern(["aaa","aaaa&…...

15. LangChain多模态应用开发:融合文本、图像与语音

引言&#xff1a;当AI学会"看听说想" 2025年某智慧医院的多模态问诊系统&#xff0c;通过同时分析患者CT影像、语音描述和电子病历&#xff0c;将误诊率降低42%。本文将基于LangChain多模态框架与Deepseek-R1&#xff0c;手把手构建能理解复合信息的智能系统。 一、…...

2022李宏毅老师机器学习课程笔记

机器学习笔记目录 1.绪论&#xff08;内容概述&#xff09;2.机器学习和深度学习的基本概念transformer 1.绪论&#xff08;内容概述&#xff09; 机器学习&#xff1a;让机器找一个函数&#xff0c;通过函数输出想要的结果。应用举例&#xff1a;语音识别&#xff0c;图像识别…...

笔试强训:Day2

一、字符串中找出连续最长的数字串(双指针) 字符串中找出连续最长的数字串_牛客题霸_牛客网 #include <iostream> #include <string> #include <cctype> using namespace std;int main() {//双指针string str;cin>>str;int nstr.size();int begin-1,l…...

linux合并命令(一行执行多个命令)的几种方式总结

背景&#xff1a; 最近安装配置机器&#xff0c;需要手打很多命令。又不能使用docker&#xff0c;所以就使用iTerm2连接多台服务器&#xff0c;然后move session到一个窗口中&#xff0c;shift command i使用XSHELL类似的撰写功能&#xff0c;就可以一次在多台服务器命令窗口…...

基于归纳共形预测的大型视觉-语言模型中预测集的**数据驱动校准**

摘要 本研究通过分离共形预测&#xff08;SCP&#xff09;框架&#xff0c;解决了大型视觉语言模型&#xff08;LVLMs&#xff09;在视觉问答&#xff08;VQA&#xff09;任务中幻觉缓解的关键挑战。虽然LVLMs在多模态推理方面表现出色&#xff0c;但它们的输出常常表现出具有…...

【器件专题1——IGBT第2讲】IGBT 基本工作原理:从结构到特性,一文解析 “电力电子心脏” 的核心机制

IGBT&#xff08;绝缘栅双极型晶体管&#xff0c;Insulated Gate Bipolar Transistor&#xff09;作为现代电力电子领域的核心器件&#xff0c;其工作原理融合了 MOSFET 的高效控制优势与 BJT 的大功率处理能力。本文从物理结构、导通 / 关断机制、核心特性等维度&#xff0c;深…...

【避坑指南】Spring拦截器中instanceof HandlerMethod失效的问题排查

问题背景 最近在使用Spring MVC开发项目时&#xff0c;我遇到了一个诡异的问题&#xff1a;在自定义拦截器的preHandle方法中&#xff0c;明明请求的是Controller层的方法&#xff0c;但handler instanceof HandlerMethod判断却总是返回false&#xff0c;导致拦截逻辑无法正常…...

青少年编程与数学 02-018 C++数据结构与算法 06课题、树

青少年编程与数学 02-018 C数据结构与算法 06课题、树 一、树(Tree)1. 树的定义2. 树的基本术语3. 常见的树类型4. 树的主要操作5. 树的应用 二、二叉树(Binary Tree)1. 二叉树的定义2. 二叉树的基本术语3. 二叉树的常见类型4. 二叉树的主要操作5. 二叉树的实现代码说明输出示例…...

docker学习笔记5-docker中启动Mysql的最佳实践

一、查找目录文件位置 1、mysql的配置文件路径 /etc/mysql/conf.d 2、mysql的数据目录 /var/lib/mysql 3、环境变量 4、端口 mysql的默认端口3306。 二、启动命令 1、启动命令说明 docker run -d -p 3306:3306 -v /app/myconf:/etc/mysql/conf.d # 挂载配置目录 -v…...

从零开始搭建Django博客③--前端界面实现

本文主要在Ubuntu环境上搭建&#xff0c;为便于研究理解&#xff0c;采用SSH连接在虚拟机里的ubuntu-24.04.2-desktop系统搭建&#xff0c;当涉及一些文件操作部分便于通过桌面化进行理解&#xff0c;通过Nginx代理绑定域名&#xff0c;对外发布。 此为从零开始搭建Django博客…...

系统与网络安全------弹性交换网络(3)

资料整理于网络资料、书本资料、AI&#xff0c;仅供个人学习参考。 STP协议 环路的危害 单点故障 PC之间的互通链路仅仅存在1个 任何一条链路出现问题&#xff0c;PC之间都会无法通信 解决办法 提高网络可靠性 增加冗余/备份链路 增加备份链路后交换网络上产生二层环路 …...

Cursor 配置 MCP Tool

文章目录 1、MCP Tool 的集合2、一个 demo :Sequential Thinking2.1、搜索一个 MCP Tool 获取 command 命令2.2、在 Cursor 配置2.3、配置状态检查与修正(解决网络问题)检查解决办法 2.4、使用 1、MCP Tool 的集合 https://smithery.ai/ 2、一个 demo :Sequential Thinking …...

SQL进阶知识:四、索引优化

今天介绍下关于索引优化的详细介绍&#xff0c;并结合MySQL数据库提供实际例子。 索引优化是数据库性能优化的关键环节之一&#xff0c;尤其是在处理大量数据时。索引可以加快查询速度&#xff0c;减少数据扫描范围&#xff0c;但不当的索引设计也可能导致性能问题。以下是关于…...

【Leetcode 每日一题】2799. 统计完全子数组的数目

问题背景 给你一个由 正 整数组成的数组 n u m s nums nums。 如果数组中的某个子数组满足下述条件&#xff0c;则称之为 完全子数组 &#xff1a; 子数组中 不同 元素的数目等于整个数组不同元素的数目。 返回数组中 完全子数组 的数目。 子数组 是数组中的一个连续非空序…...

OpenCV中的SIFT特征提取

文章目录 引言一、SIFT算法概述二、OpenCV中的SIFT实现2.1 基本使用2.1.1 导入库2.1.2 图片预处理2.1.3 创建SIFT检测器2.1.4 检测关键点并计算描述符2.1.5 检测关键点并计算描述符并对关键点可视化2.1.6 印关键点和描述符的形状信息 2.2 参数调优 三、SIFT的优缺点分析3.1 优点…...

【金仓数据库征文】-《深入探索金仓数据库:从基础到实战》

目录 前言 什么是金仓数据库&#xff1f; 金仓数据库的特点 金仓数据库的核心特点 金仓数据库与其他数据库的对比 金仓数据库的安装 常见的语句 总结 前言 为助力开发者、运维人员及技术爱好者快速掌握这一工具&#xff0c;本文将系统性地介绍金仓数据库的核心知识。内…...

RocketMQ 主题与队列的协同作用解析(既然队列存储在不同的集群中,那要主题有什么用呢?)---管理命令、配置安装

学习之前呢需要会使用linux的基础命令 一.RocketMQ 主题与队列的协同作用解析 在 RocketMQ 中&#xff0c;‌主题&#xff08;Topic&#xff09;‌与‌队列&#xff08;Queue&#xff09;‌的协同设计实现了消息系统的逻辑抽象与物理存储分离。虽然队列实际存储在不同集群的 B…...

从岗位依附到能力生态:AI革命下“什么叫就业”的重构与价值

在人工智能(AI)技术深刻重塑社会生产关系的当下,“就业”这一概念正经历着从“职业绑定”到“能力变现”的范式转移。本文将从传统就业观的解构、AI赋能艺术教育的价值逻辑、以及未来就业形态的进化方向三个维度,探讨技术驱动下就业的本质变革,并揭示AI技术如何通过教育创…...