<c++> 类与对象 | 面向对象 | 访问说明符 | 类的声明 | 创建类
文章目录
- 前言
- 面向过程编程
- 面向对象编程
- 什么是类
- 类和结构体有什么区别
- 三个访问说明符
- 如何创建一个类
- 类的声明
- 创建类
- 申明和定义全部放在类中
- 声明和定义分离
前言
- 从这里我们正式开始学习
c++中的面向对象编程,在学习之前,我们有必要了解一下什么是面向对象编程以及与面向过程编程的区别。
面向过程编程
Q:什么是面向过程编程?
A:面向过程编程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步的实现,使用的时候一个一个的调用。
面向对象编程
Q:什么是面向对象编程?
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
举个例子:比如设计一个踢足球的系统
面向过程:关注于实现踢足球中传球,带球,射门这些过程。用函数一个一个表达。
面向对象:关注于实现类对象及类对象间的关系,球,球员以及他们之间的关系。
什么是类
Q:什么是类?
A:类是将同类对象的共同属性和行为抽象出来形成的一个相对复杂的数据类型, 这与结构体一样,都是为了描述一个相对复杂的对象。
类和结构体有什么区别
-
c++类是C++对于C语言中的结构体的延伸 -
类相比与结构体,它可以将函数作为成员,一般在类中声明,把函数体放在类外实现。
-
结构体和类都可以被访问(对象名 . 成员名 / 对象指针 -> 成员名), 但区别是类中可以使用三个访问说明符(用来设定访问权限)。
三个访问说明符
c++类中有三个访问说明符,分别是public,private,protected下面我们来了解一下他们具体的作用。
public,定义在public说明符之后的成员在整个程序内可被访问。private,定义在private说明符之后的成员可以被类的成员函数访问,但是不能被类的对象访问。- 定义在
protected说明符之后的成员可以被派生类的成员函数访问,不能被类的对象访问。
如何创建一个类
类的声明
在创建类之前,我们先来学会如何声明一个类。在c++中声明一个类和声明一个结构体类似。
下面是一段声明结构体的代码:
struct Student {//声明了一个名为Student的结构体类型 int num; char name[20]; char sex;
};
Student stu; //定义了结构体变量stu
下面是一段声明类的代码:
class Student {//以class开头int num; char name[20]; char sex;//以上3行是数据成员 void display() {//这是成员函数 cout <<″num:″ << num << endl;cout <<″name:″ << name << endl; cout <<″sex:″ << sex << endl; }
}
Student stu; //定义了结构体变量stu
可以看到声明类的方法和声明结构体类型的方法类似。不同点在于,类是一种广义的数据类型,这种数据类型中的数据既可以包含数据,也可以包含操作数据的函数。
创建类
类的创建一般有两种方法:
- 申明和定义全部放在类中
- 声明和定义分离
举个最简单的例子,我们创建一个狗狗类
申明和定义全部放在类中
#include <iostream>
#include<string.h>
using namespace std;
class Dog {public://成员函数void set(char n[20], int a) {//实现setPoint函数strcpy(name,n);age = a;}void print() {//实现printPoint函数cout << "name: " << name << endl;cout << "age: " << age << endl;}private://成员变量char name[20];int age;
};int main() {Dog dog; //用定义好的类创建一个对象 dog.set("旺财", 2); //设置狗狗姓名,年龄 dog.print(); //输出狗狗的信息return 0;
}
在这个程序中,申明和定义全部放在类中,如果类里的成员函数很多的话,阅读起来就会乱很多。
声明和定义分离
#include <iostream>
#include<string.h>
using namespace std;
class Dog {public://成员函数void set(char n[20], int a);void print();private://成员变量char name[20];int age;
};void Dog::set(char n[20], int a) {//实现setPoint函数strcpy(name,n);age = a;
}void Dog::print() {//实现printPoint函数cout<< "name: " << name << endl;cout<< "age: " << age << endl;
}int main() {Dog dog; //用定义好的类创建一个对象 dog.set("旺财", 2); //设置狗狗姓名,年龄 dog.print(); //输出狗狗的信息return 0;
}
在这个程序中,声明和定义分离,就是成员函数仅在类内声明函数原型,在类外定义函数,这样在类里就可以看到所有的成员函数,看不见实现的过程,相比起来精简很多。
注意:声明和定义分离创建类的时候,需要使用作用域解析运算符(::)来标识函数所属的类。
相关文章:
<c++> 类与对象 | 面向对象 | 访问说明符 | 类的声明 | 创建类
文章目录前言面向过程编程面向对象编程什么是类类和结构体有什么区别三个访问说明符如何创建一个类类的声明创建类申明和定义全部放在类中声明和定义分离前言 从这里我们正式开始学习c中的面向对象编程,在学习之前,我们有必要了解一下什么是面向对象编程…...
恭喜!龙蜥社区荣登 2022 科创中国“开源创新榜”
2 月 20 日,中国科协召开以“创新提振发展信心,科技激发产业活力”为主题的2023“科创中国”年度会议。会上,“科创中国”联合体理事长、中国工程院院士周济介绍了 2022 年系列榜单征集遴选情况,并与中国科协副主席、中国工程院院…...
2023双非计算机硕士应战秋招算法岗之机器学习基础知识
目录 特征工程 2 缺失值处理 15 评价指标 33 逻辑回归 37 决策树 40 随机森林 46 SVM 49 Knn 56 Kmeans 59 PCA 66 朴素贝叶斯 68 常见分类算法的优缺点 72 特征工程 1.什么是特征工程 有这么一句话在业界广泛流传,数据和特征决定了机器学习的上限,而模型…...
二、TS的基础类型、类型注解
TS的基础类型、类型注解 TS的基础类型 js的数据类型: 基础数据类型(7个) boolean string number null undefined BigInt Symbol 引用数据类型(1个) Object 变量后面多了一个注解,注解为变量限定数据类型&…...
3年经验,3轮技术面+1轮HR面,拿下字节30k*16薪offer,这些自动化测试面试题值得大家借鉴
面试一般分为技术面和hr面,形式的话很少有群面,少部分企业可能会有一个交叉面,不过总的来说,技术面基本就是考察你的专业技术水平的,hr面的话主要是看这个人的综合素质以及家庭情况符不符合公司要求,一般来…...
分类预测 | MATLAB实现WOA-CNN-LSTM鲸鱼算法优化卷积长短期记忆网络数据分类预测
分类预测 | MATLAB实现WOA-CNN-LSTM鲸鱼算法优化卷积长短期记忆网络数据分类预测 目录分类预测 | MATLAB实现WOA-CNN-LSTM鲸鱼算法优化卷积长短期记忆网络数据分类预测分类效果基本描述模型描述程序设计参考资料分类效果 基本描述 1.Matlab实现WOA-CNN-LSTM多特征分类预测&…...
自然语言处理(NLP)之近似训练法:负采样与层序Softmax
我们在前面介绍的跳字模型与连续词袋模型有个缺陷就是在计算梯度时的开销随着词典增大会变得很大,因为每一步的梯度计算都包含词典大小数目的项的累加。为了降低这种带来的计算复杂度,介绍两种近似的处理方案:负采样和层序softmax负采样(Nega…...
关于上位机,C#
TCP与modbusTCP的区别 (10条消息) C#高级--常用数据结构_李宥小哥的博客-CSDN博客_c# 数据结构 C#中常用的数据结构 TCP/IP协议是网络通讯协议。MODBUS是应用与工业现场(电子控制)的通讯协议。两者的应用范围和应用环境有…...
华为OD机试真题 用 C++ 实现 - 字符串加密 | 多看题,提高通过率
最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…...
达梦8数据守护动态增加实时备库
实时主备环境 类型 业务IP 库名 实例名 PORT_NUM MAL_HOST MAL_INST_DW_PORT MAL_PORT MAL_DW_PORT 主库dm8p 192.168.1.223 DAMENG GRP1_RT_01 5236 10.0.0.223 45101 55101 65101 备库dm8s 192.168.1.224 DAMENG GRP1_RT_02 5236 10.0.0.224 45121…...
《代码整洁之道 - 程序员的职业素养》读书笔记
一 前言 《代码整洁之道 - 程序员的职业素养》的作者是Robert C. Martin,大家喜欢喊他Bob大叔。这本书主要是Bob大叔40年编程生涯的心得体会,主要讲述了一个专业的程序员需要具备什么样的态度,遵循什么样的原则,采取什么样的行动。…...
八、CSS新特性二
文章目录一、CSS3多背景和圆角二、怪异盒子模型三、多列属性四、H5多列布局瀑布流五、CSS3线性渐变5.1 线性渐变5.2 径向渐变六、CSS3过渡动画七、CSS3 2D八、CSS3动画一、CSS3多背景和圆角 css3多背景,表示CSS3中可以添加多个背景。 CSS3圆角 border-radius: 0px;…...
Ubuntu国内镜像源
查看系统版本命令: $ lsb_release -aDistributor ID: UbuntuDescription: Ubuntu 22.04 LTSRelease: 22.04Codename: jammy国内的更新源有多个,几个大互联网公司的源都比较稳定,没什么差别。 下面是比较主流的、常用的几个…...
3.Linux安装es单机版
1.下载 版本 JDK 11ES elasticsearch-7.10.0 jdk安装 下载: wget https://download.java.net/openjdk/jdk11/ri/openjdk-1128_linux-x64_bin.tar.gz配置环境变量:# 编辑配置文件 vim /etc/profile# Java11环境变量配置 export JAVA_HOME/devtools/ja…...
C语言实现通讯录
咱们手机上面还有教务系统上都可以存储信息,这些都是使用编程语言来实现的,那么今天,咱们今天就用C语言来实现通讯录。 一. 实验名称 通讯录 二. 实验目标 1.数据的储存 2.数据的增加 3.数据的删除 4.数据的修改 5.数据的展示 6.数据…...
Python-生成列表
1.生成列表使用列表前必须先生成列表。1.1使用运算符[ ]生成列表在运算符[ ]中以逗号隔开各个元素会生成包含这些元素的新列表。另外,如果[ ]中没有元素就会生成空列表示例>>> list01 [] >>> list01 [] >>> list02 [1, 2, 3] >>…...
如何写好controller层
前言本篇主要要介绍的就是controller层的处理,一个完整的后端请求由4部分组成:1. 接口地址(也就是URL地址)、2. 请求方式(一般就是get、set,当然还有put、delete)、3. 请求数据(request,有head跟body)、4. 响应数据(response)本篇…...
MySQL---视图的概念与操作
MySQL—视图的概念与操作 常见的数据库对象 对象描述表(TABLE)表是存储数据的逻辑单元,以行和列的形式存在,列就是字段,行就是记录数据字典就是系统表,存放数据库相关信息的表。系统表的数据通常由数据库系统维护, 程…...
ChatGPT,会是现实世界的MOSS吗?
最近,两个人工智能系统彻底火出了圈,成为许多网友热议的焦点。 一个是冷酷无情的“幕后主角”MOSS,一个是多才多艺的“全能网友”ChatGPT。 先来说说MOSS。今年春节档,科幻电影《流浪地球2》热映,电影中一个面试环节令…...
安卓大厂面试题_安卓开发面经_Android大厂面经(22/30)之JNI全解析
系列专栏: 《150道安卓常见面试题全解析》 安卓专栏目录见帖子 : 安卓面经_anroid面经_150道安卓常见基础面试题全解析 安卓系统Framework面经专栏:《Android系统Framework面试题解析大全》 安卓系统Framework面经目录详情:Android系统面经_Framework开发面经_150道面试题答…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...
