C++类(1)

news2024/11/26 7:54:06

一、面向过程与面向对象的初步认识

C语言是面向过程的,关注的是过程,分析出问题的步骤,通过函数调用逐步解决问题。

C++是面向对象的,关注的是对象,将一件事拆分成不同的对象,靠对象之间的交互完成。

二、类的引入

在C语言中,结构体只能定义变量,但在C++中结构体不仅仅能定义变量,它还可以定义函数。

例如:在C语言中实现栈,在结构体中只能定义变量。但在C++中便可以在结构体中直接定义函数,更加容易区分。如:

#include<iostream>
#include<assert.h>
using namespace std;
struct Stack
{

	void Init()
	{
		a = nullptr;
		size = capacity = 0;
	}
	void Push(int x)
	{
		if (capacity == size)
		{
			int newcapacity = capacity == 0 ? 4 : capacity * 2;
			int* tmp = (int*)realloc(a, sizeof(int) * newcapacity);	
			if (tmp == nullptr)
			{
				perror("realloc fail\n");
				exit(-1);
			}
			a = tmp;
			capacity = newcapacity;
		}
		a[size++] = x;
	}
	void Pop()
	{
		size--;
	}
	int Top()
	{
		return a[size - 1];
	}
	void Destory()
	{
		free(a);
		a = nullptr;
		size = capacity = 0;
	}

	int* a;
	int size;
	int capacity;
};

int main()
{
	Stack st;
	st.Init();
	st.Push(1);
	st.Push(2);
	st.Push(3);
	st.Push(4);
	st.Pop();
	cout << st.Top() <<  endl;
	st.Destory();
	return 0;
}

但是在C++中更喜欢用class定义类

三、类的定义

class classname
{
	//成员函数或成员变量
};

类有两种定义方法:

  1. 声明和定义全部放在类体中,如:
    class A
    {
    	void Print()
    	{
    		cout << "A" << endl;
    	}
    	int Add(int& a, int& b)
    	{
    		return a + b;
    	}
    
    	int a;
    	int b;
    };

    注:成员函数在类中定义,编译器可能会将其当成内联函数处理。

  2. 声明放在在头文件中,定义放在源文件中。注:成员函数在定义时,需要在函数名前加类名::。如:

    //头文件
    class name
    {
    public:
    	void Print();
    private:
    	char* n;
    	int a;
    };
    //源文件
    void name::Print()
    {
    	cout << "a" << endl;
    }

    四、类的访问限定符即封装

4.1封装

封装是指将数据和操作数据的方法放在一起,隐藏对象的属性和实现细节,仅对外公开接口和对象交互。在C++中就是,通过访问权限来隐藏对象内部的实现细节,控制那些方法可以在外部使用。

封装本质上就是一种管理,让用户更方便的使用类。

4.2访问限定符

在C++中,类一共有三个访问限定符,分别是:public、private、protected

访问限定符的说明

  1. public修饰的成员可以在类外进行访问
  2. protected和priva修饰的成员在类外不能直接被访问到
  3. 访问权限的作用域是从该访问限定符出现的位置开始到下一个访问限定符结束。如果后面没有访问限定符,作用域就到类的结束
  4. class的默认访问权限是private

C++中class和struct的相同点:

由于C++需要兼容C语言,所有的C++中struct是可以当结构体使用的,还可以用来定义类,和class定义类是一样的。

C++中class和struct的不同点:

class的默认访问权限是private而struct的默认访问权限是public

 

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

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

相关文章

记录:从.Net程序的内存转储文件中提取内存数据过程

1.准备材料&#xff1a;xxx.dump转储文件&#xff0c;VS2022 2.提取过程 使用VS打开xxx.dump文件VS中点击 调试托管内存 按钮查找需要导出的变量&#xff0c;注&#xff1a;通过类型查找时基础变量类型跟原类型不一样&#xff0c;如string对应String&#xff0c;bool对应Bool…

Nacos学习文档

目录 1、Nacos是什么2、Nacos名词介绍3、Nacos中的data id是如何组装的&#xff1f;4、Nacos 融合 Spring Cloud&#xff0c;成为注册配置中心4.1、Maven依赖作用4.2、启动配置管理4.2.1、添加依赖4.2.2、在 bootstrap.yml&#xff08;也支持properties格式&#xff09; 中添加…

QT简易项目 数据库可视化界面 数据库编程SQLITE QT5.12.3环境 C++实现

案例需求&#xff1a; 完成数据库插入&#xff0c;删除&#xff0c;修改&#xff0c;查看操作。 分为 插入&#xff0c;删除&#xff0c;修改&#xff0c;查看&#xff0c;查询 几个模块。 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget…

【Linux学习】【Ubuntu入门】2-3 make工具和makefile引入

1.使用命令新建三个.c文件vi main.c&#xff0c;vi input.c&#xff0c;vi caclcu.c&#xff0c;两个.h文件vi input.h&#xff0c;vi caclcu.h 2.vi Makefile&#xff1a;新建Makefile文件&#xff0c;输入一下内容 注意&#xff1a;命令列表中每条命令前用TAB键&#xff0c;不…

Gazebo仿真实现无人机+Apriltag码动态跟踪

目录 演示 一、环境 二、配置 创建模型 首先相机创建 添加相机 Apriltag创建 地图添加apriltag码 Apriltag_ros配置 三、代码运行 四、问题 修改相机模型的参数 演示 一、环境 ROSgazebo配置 Px4Mavros Apriltag_ros编译 二、配置 在默认的mavros_posix_sitl.l…

H.265流媒体播放器EasyPlayer.js播放器提示MSE不支持H.265解码可能的原因

随着人工智能和机器学习技术的应用&#xff0c;流媒体播放器将变得更加智能&#xff0c;能够根据用户行为和偏好提供个性化的内容推荐。总体而言&#xff0c;流媒体播放器的未来发展将更加注重技术创新和用户互动&#xff0c;以适应不断变化的市场需求和技术进步。 提示MSE不支…

加菲工具 - 好用免费的在线工具集合

加菲工具 https://orcc.online AI 工具 集合了目前主流的&#xff0c;免费可用的ai工具 文档处理 pdf转word、office与pdf互转等等工具都有链接 图片图标 统计了好用免费的在线工具 编码解码 base64编码解码、url编码解码、md5计算、进制转换等等 其它 还有其他好用的…

【linux学习指南】初识Linux进程信号与使用

文章目录 &#x1f4dd;信号快速认识&#x1f4f6;⽣活⻆度的信号&#x1f4f6; 技术应⽤⻆度的信号&#x1f309; 前台进程&#xff08;键盘&#xff09;&#x1f309;⼀个系统函数 &#x1f4f6;信号概念&#x1f4f6;查看信号 &#x1f320; 信号处理&#x1f309; 忽略此信…

今天你学C++了吗?——C++中的类与对象(第二集)

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…

Anaconda3 2024 jupyter notebook 配置默认文件路径

我的版本如下&#xff1a; 第一步&#xff1a; 打开命令行anaconda prompt &#xff0c; 敲下面命令生成配置文件 jupyter notebook --generate-config 如下图&#xff1a; 修改配置jupyter_notebook_config.py 文件中搜索c.ServerApp.root_dir &#xff08; 对于 Anac…

【抓包专题】burpsuitProxifier小程序抓包

抓包系列文章 burpsuit&Proxifier&小程序抓包 抓包系列文章前言一、工具下载二、获取证书并安装到本地三、抓包测试 前言 抓包是进行渗透的第一步&#xff0c;包都抓不到&#xff0c;渗透就不要谈了&#xff0c;废话少说&#xff0c;开干 一、工具下载 Proxifier安装使…

springboot 异步 @Async 的日常使用及失效场景

文章目录 springboot 异步 Async 的日常使用引言一、Async 使用位置二、Async 使用三、注解 Async 失效的情况&#xff08;1&#xff09;调用同一个类中的异步方法&#xff08;内部调用&#xff09;&#xff08;2&#xff09;未使用 EnableAsync 注解&#xff08;3&#xff09;…

WebGIS技术汇总

WebGIS系统通常都围绕地图进行内容表达&#xff0c;但并不是有地图就一定是WebGIS&#xff0c;所以有必要讨论下基于Web的地图API分类及应用场景。 Web上的Map API主要分类如下几类&#xff1a; Charts&#xff1a;以D3.js&#xff0c;Echarts等为代表。LBS&#xff1a;以高德…

使用Vue3来实现一个倒计时器以及倒计时任务

本内容使用Vue3&#xff0c;以及element-plus辅助开发。 首先展示倒计时器的功能&#xff1a; 手动设置倒计时器的倒计时时间开始倒计时按钮暂停倒计时按钮重新开始倒计时按钮 其次展示倒计时任务管理界面功能&#xff1a; 创建倒计时任务选择任务并进行倒计时删除任务 目录 一…

VMware Workstation 虚拟机运行卡顿解决方案

前言 由于我们网站主力是模拟器多开&#xff0c;VMware虚拟机纯属我个人使用的经验&#xff0c;仅供参考。顺带一提&#xff1a;多开鸭的系统精简掉的是Hyper-V&#xff0c;跟VMware完全没有任何关系&#xff0c;Hyper-V跟雷电这些模拟器会冲突&#xff0c;但是移除之后不会影…

GitLab|应用部署

创建docker-compose.yaml文件 输入docker-compose配置 version: 3.8 services:gitlab:image: gitlab/gitlab-ce:15.11.2-ce.0restart: alwayscontainer_name: gitlab-ceprivileged: truehostname: 192.168.44.235environment:TZ: Asia/ShanghaiGITLAB_OMNIBUS_CONFIG: |exter…

ssm182在线作业管理系统的设计与实现+vue(论文+源码)_kaic

设计题目&#xff1a;在线作业管理系统的设计与实现 摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所…

LeetCode-632. Smallest Range Covering Elements from K Lists [C++][Java]

目录 题目描述 解题思路 【C】 【Java】 LeetCode-632. Smallest Range Covering Elements from K Listshttps://leetcode.com/problems/smallest-range-covering-elements-from-k-lists/description/ 题目描述 You have k lists of sorted integers in non-decreasing o…

指针的奥秘:深入探索内存的秘密

前言 在计算机编程的广阔天地中&#xff0c;指针作为一种独特的数据类型&#xff0c;它不仅是C语言的核心&#xff0c;也是理解计算机内存管理的基石。指针的概念虽然强大&#xff0c;但对于初学者来说&#xff0c;它常常是学习过程中的一个难点。本文旨在揭开指针的神秘面纱&a…

⭐ Unity 资源管理解决方案:Addressable_ Demo演示

一、使用Addressable插件的好处&#xff1a; 1.自动管理依赖关系 2.方便资源卸载 3.自带整合好的资源管理界面 4.支持远程资源加载和热更新 二、使用步骤 安装组件 1.创建资源分组 2.将资源加入资源组 3.打包资源 4.加载资源 三种方式可以加载 using System.Collections…