C++ 中的类(class)和对象(object)
在 C++ 中,类(class)和对象(object)是面向对象编程(OOP)的核心概念。类是一种用户自定义的数据类型,它将数据(成员变量)和操作这些数据的函数(成员函数)封装在一起。对象则是类的实例,通过创建对象可以使用类中定义的成员变量和成员函数。下面详细介绍 C++ 中类和对象的相关知识。
1. 类的定义
类的定义使用 class 关键字,其基本语法如下:
class 类名 {// 访问修饰符:public、private、protectedpublic:// 公有成员,外部可以直接访问// 成员变量数据类型 成员变量名;// 成员函数声明返回类型 成员函数名(参数列表);private:// 私有成员,外部不能直接访问,只能通过公有成员函数访问数据类型 成员变量名;protected:// 受保护成员,在派生类中可以访问数据类型 成员变量名;
}; // 注意这里的分号不能省略
示例代码:
#include <iostream>// 定义一个名为 Person 的类
class Person {
public:// 公有成员变量std::string name;int age;// 公有成员函数,用于显示信息void displayInfo() {std::cout << "姓名: " << name << ", 年龄: " << age << std::endl;}
};
2. 对象的创建和使用
定义好类之后,就可以创建该类的对象,并使用对象来访问类的成员变量和成员函数。创建对象的语法如下:
类名 对象名;
示例代码:
#include <iostream>class Person {
public:std::string name;int age;void displayInfo() {std::cout << "姓名: " << name << ", 年龄: " << age << std::endl;}
};int main() {// 创建 Person 类的对象Person person1;// 访问对象的成员变量并赋值person1.name = "张三";person1.age = 20;// 调用对象的成员函数person1.displayInfo();return 0;
}
3. 构造函数和析构函数
- 构造函数:是一种特殊的成员函数,用于在创建对象时初始化对象的成员变量。构造函数的名称与类名相同,没有返回类型。
- 析构函数:也是一种特殊的成员函数,用于在对象销毁时进行一些清理工作。析构函数的名称是在类名前加上波浪号
~,同样没有返回类型。
示例代码:
#include <iostream>class Person {
public:std::string name;int age;// 构造函数Person(std::string n, int a) {name = n;age = a;std::cout << "对象已创建" << std::endl;}// 析构函数~Person() {std::cout << "对象已销毁" << std::endl;}void displayInfo() {std::cout << "姓名: " << name << ", 年龄: " << age << std::endl;}
};int main() {// 使用构造函数创建对象Person person("李四", 25);person.displayInfo();return 0;
}
4. 访问修饰符
C++ 中有三种访问修饰符:
public:公有成员可以在类的外部直接访问。private:私有成员只能在类的内部访问,外部不能直接访问,通常通过公有成员函数来间接访问。protected:受保护成员在类的内部和派生类中可以访问,外部不能直接访问。
示例代码:
#include <iostream>class Person {
private:std::string name;int age;public:// 构造函数Person(std::string n, int a) {name = n;age = a;}// 公有成员函数,用于获取私有成员变量的值void displayInfo() {std::cout << "姓名: " << name << ", 年龄: " << age << std::endl;}
};int main() {Person person("王五", 30);// 不能直接访问私有成员变量// person.name = "赵六"; // 错误person.displayInfo();return 0;
}
5. 成员函数的实现
成员函数可以在类的定义中直接实现,也可以在类的外部实现。在类的外部实现成员函数时,需要使用作用域解析运算符 ::。
示例代码:
#include <iostream>class Person {
private:std::string name;int age;public:Person(std::string n, int a);void displayInfo();
};// 在类的外部实现构造函数
Person::Person(std::string n, int a) {name = n;age = a;
}// 在类的外部实现成员函数
void Person::displayInfo() {std::cout << "姓名: " << name << ", 年龄: " << age << std::endl;
}int main() {Person person("孙七", 35);person.displayInfo();return 0;
}
通过以上内容,你可以了解 C++ 中类和对象的基本概念、定义和使用方法。类和对象是 C++ 面向对象编程的基础,掌握它们对于编写复杂的程序非常重要。
相关文章:
C++ 中的类(class)和对象(object)
在 C 中,类(class)和对象(object)是面向对象编程(OOP)的核心概念。类是一种用户自定义的数据类型,它将数据(成员变量)和操作这些数据的函数(成员函…...
安卓通过网络获取位置的方法
一 方法介绍 1. 基本权限设置 首先需要在 AndroidManifest.xml 中添加必要权限: xml <uses-permission android:name"android.permission.INTERNET" /> <uses-permission android:name"android.permission.ACCESS_NETWORK_STATE" /&g…...
2025 年,链上固定收益领域迈向新时代
“基于期限的债券市场崛起与 Secured Finance 的坚定承诺” 2025年,传统资产——尤其是股票和债券——大规模涌入区块链的浪潮将创造历史。BlackRock 首席执行官 Larry Fink 近期在彭博直播中表示,代币化股票和债券将逐步融入链上生态,将进一…...
npm启动前端项目时报错(vue) error:0308010C:digital envelope routines::unsupported
vue 启动项目时,npm run serve 报下面的错: error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:67:19) at Object.createHash (node:crypto:133:10) at FSReqCallback.readFileAfterClose [as on…...
11.QT控件:输入类控件
1. Line Edit(单行输入框) QLineEdit表示单行输入框,用来输入一段文本,但是不能换行。 核心属性: 核心信号: 2. Text Edit(多行输入框) QTextEdit表示多行输入框,也是一个富文本 & markdown编辑器。并且能在内容超…...
deepseek核心技术:MLA架构-多头潜在注意力
deepseek核心技术:MLA架构-多头潜在注意力 MLA架构即Multi-Head Latent Attention(多头潜在注意力)架构,是一种优化后的注意力机制。以下是对其及相关示例的具体介绍: 工作原理 输入嵌入:将输入序列中的每个元素转换为向量表示,即嵌入向量。例如在处理文本时,将文本中…...
讯飞星火大模型API使用Python调用
本文仅仅为简单API调用,更多复杂使用方法请参见接口文档 先在科大讯飞开放平台注册账号,点击控制台,在我的应用中创建新应用,新应用的名称可以自定义,这里我写的是ai对话: 在这里我们使用的模型为Speak Ul…...
C#面试常考随笔7:什么是匿名⽅法?还有Lambda表达式?
匿名方法本质上是一种没有显式名称的方法,它可以作为参数传递给需要委托类型的方法,常用于事件处理、回调函数等场景,能够让代码更加简洁和紧凑。 使用场景 事件处理:在处理事件时,不需要为每个事件处理程序单独定义…...
Elasticsearch:如何搜索含有复合词的语言
作者:来自 Elastic Peter Straer 复合词在文本分析和标记过程中给搜索引擎带来挑战,因为它们会掩盖词语成分之间的有意义的联系。连字分解器标记过滤器等工具可以通过解构复合词来帮助解决这些问题。 德语以其长复合词而闻名:Rindfleischetik…...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.25 视觉风暴:NumPy驱动数据可视化
1.25 视觉风暴:NumPy驱动数据可视化 目录 #mermaid-svg-i3nKPm64ZuQ9UcNI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-i3nKPm64ZuQ9UcNI .error-icon{fill:#552222;}#mermaid-svg-i3nKPm64ZuQ9UcNI …...
idea maven本地有jar包,但还要从远程下载
idea 中,java 工程执行 maven reimport,报jar报无法下载。 我奇了个怪,我明明在本地仓库有啊,你非得从远程下载? 我从供应商那里拿来的,远程当然没有了。 这太奇葩了吧,折腾好久不行。 后来…...
C++编程语言:抽象机制:模板(Bjarne Stroustrup)
目录 23.1 引言和概观(Introduction and Overview) 23.2 一个简单的字符串模板(A Simple String Template) 23.2.1 模板的定义(Defining a Template) 23.2.2 模板实例化(Template Instantiation) 23.3 类型检查(Type Checking) 23.3.1 类型等价(Type Equivalence) …...
深入解析 Linux 内核中的页面错误处理机制
在现代操作系统中,页面错误(Page Fault)是内存管理的重要组成部分。当程序试图访问未映射到物理内存的虚拟内存地址时,CPU 会触发页面错误异常。Linux 内核通过一系列复杂的机制来处理这些异常,确保系统的稳定性和性能。本文将深入解析 Linux 内核中处理页面错误的核心代码…...
【AIGC专栏】AI在自然语言中的应用场景
ChatGPT出来以后,突然间整个世界都非常的为之一惊。很多人大喊AI即将读懂人类,虽然这是一句夸大其词的话,但是经过未来几十年的迭代,ChatGPT会变成什么样我们还真的很难说。在当前生成式内容来说,ChatGPT毫无疑问在当前…...
Ubuntu 20.04安装Protocol Buffers 2.5.0
个人博客地址:Ubuntu 20.04安装Protocol Buffers 2.5.0 | 一张假钞的真实世界 安装过程 Protocol Buffers 2.5.0源码下载:https://github.com/protocolbuffers/protobuf/tree/v2.5.0。下载并解压。 将autogen.sh文件中以下内容: curl htt…...
解锁豆瓣高清海报(一) 深度爬虫与requests进阶之路
前瞻 PosterBandit 这个脚本能够根据用户指定的日期,爬取你看过的影视最高清的海报,然后使用 PixelWeaver.py 自动拼接成指定大小的长图。 你是否发现直接从豆瓣爬取下来的海报清晰度很低? 使用 .pic .nbg img CSS 选择器,在 我…...
计算机组成原理——数据运算与运算器(二)
生活就像一条蜿蜒的河流,有时平静,有时湍急。我们在这条河流中前行,会遇到风雨,也会遇见阳光。重要的是,无论遇到什么,都要保持内心的平静与坚定。每一次的挫折,都是让我们成长的机会࿱…...
SpringBoot+Vue的理解(含axios/ajax)-前后端交互前端篇
文章目录 引言SpringBootThymeleafVueSpringBootSpringBootVue(前端)axios/ajaxVue作用响应式动态绑定单页面应用SPA前端路由 前端路由URL和后端API URL的区别前端路由的数据从哪里来的 Vue和只用三件套axios区别 关于地址栏url和axios请求不一致VueJSPS…...
【AI】DeepSeek 概念/影响/使用/部署
在大年三十那天,不知道你是否留意到,“deepseek”这个词出现在了各大热搜榜单上。这引起了我的关注,出于学习的兴趣,我深入研究了一番,才有了这篇文章的诞生。 概念 那么,什么是DeepSeek?首先百…...
javascript-es6 (二)
函数进阶 函数提升 函数提升与变量提升比较类似,是指函数在声明之前即可被调用 好处:能够使函数的声明调用更灵活 函数提升出现在 相同作用域 当中 //可调用函数 fn()//后声明函数 function fn() {console.log(可先调用再声明) } 注意:函数表…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
