首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++ 类和对象的初步介绍

C++ 类和对象的初步介绍

作者头像
Yui_
发布于 2024-10-16 00:55:48
发布于 2024-10-16 00:55:48
9100
代码可运行
举报
文章被收录于专栏:Yui编程知识Yui编程知识
运行总次数:0
代码可运行

1.面向过程和面向对象的初步认识

C语言是面向过程的,关注的过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C++是基于面向对象的,关注的对象,将一件事情拆分成不同的对象,靠对象间的交互完成。

面向对象编程是一种常用的编程思维,它强调万物皆为对象,因此在编程时我们可以把现实世界中的事物抽象成程序中的对象,从而实现软件的设计与开发。与传统的函数编程不同,面向对象编程注重将数据与行为封装在一起,也就是对象包含数据状态,还包含可调用的行为方法。

面向对象编程的特点在于,它具有封装,继承和多态三大特性,封装意味着对象的状态和行为进行封装,使其对外只需要暴露出必要的接口,从而提高了安全性和可维护性;继承是指某个对象可以继承另一个对象的特性,从而快速构建相似属性的对象;多态是指同一种行为在不同的对象上具有不同的表现形式,即在不同的情境下,同一方法可以被不同的对象进行调用。

总之面向对象是一种强大的编程方法,它具有高度的封装性、灵活的继承性和强大的多态性,通过使用对象作为程序的基本处理单元,实现了数据和行为高度有机结合,可以使程序更加高效,结构清晰,并方便管理和扩展。

2.类的引入

C语言结构体中只能定义变量,在C++中,结构体不加可以定义变量,也可以定义函数。比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typedef int DataType;

struct  stack
{
	int top;
	int capacity;
	DataType* array;
	void Init() {
		top = 0;
		array = (DataType*)malloc(sizeof(DataType) * 4);
		if (array == nullptr) {
			perror("malloc");
			return;
		}
		capacity = 4;
	}
	void Push(DataType x) {
		if (top == capacity) {
			//扩容
			DataType* tmp = (DataType*)realloc(array, sizeof(DataType) * (capacity * 2));
			if (tmp == nullptr) {
				perror("realloc");
				return;
			}
			array = tmp;
			capacity *= 2;
		}
		array[top] = x;
		top += 1;
	}
	DataType Top() {
		if (top == 0) {
			cout << "stack is empty";
		}
		return array[top - 1];
	}
};

int main()
{
	struct stack ss;
	ss.Init();
	ss.Push(1);
	ss.Push(1);
	ss.Push(1);
	return 0;
}

用C语言实现的栈,结构体中只能定义变量,而现在用C++实现,会发现struct中也可以定义函数。 同时我们也发现,我们再也不用像C语言那样在传个结构体类型到函数中了,直接就可以使用结构体中的变量。 不过在C++中,我们更倾向于用class来定义类。

3.类的定义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class ClassName{
	//类的组成成分:成员变量和成员函数
};

class为定义类的关键字,ClassName为类的名字,{}中为类的主体。注意分号就是了。 类体中的内容称为类的成员:类中的变量称类的属性或成员变量;类中的函数称为类的方法或者成员函数。 类的两种定义方式

  1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class TestClass{
public:
	void Print(){
		cout<<_a<<_b<<_c<<endl;
	}	
private:
	char* _a;
	int _b;
	int _c;
};
  1. 类声明放在.h文件中,成员函数定义在.cpp文件中,注意:成员函数名前面需要加类名::
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//test.h
class TestClass(){
public:
	void Print();
private:
	char* _a;
	int _b;
	int _c;
};

//test.cpp
void TestClass::Print(){
	cout<<_a<<_b<<_c<<endl;
}

在一般情况下,更期望采用第二种方式。

类中成员变量命名建议:建议在命名前或者后加上下划线。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
name  ->  _name

age  ->   _age

这样的话,可以很好的类中的成员变量和其他变量。

4. 类的访问限定符及封装

4.1 访问限定符

C++实现封装的方式:用类将对象的属性于方法结合在一块,让对象更加完善,通过访问权限限制性的将其接口提供给外部的用户使用。

访问限定符
访问限定符
  1. public修饰的成员在类外可以被直接访问。
  2. protected和private修饰的成员在类外不能直接被访问。
  3. 访问权限作用域从该修饰限定字符出现的位置开始直到下一个访问限定符出现为止。
  4. 如果后面没有访问限定符,作用域就到}截止。
  5. class的默认访问权限为private,struct的默认访问权限为public。 提问:C++中的struct和class的区别 回答:C++需要兼容C语言,所以C++中struct可以当成结构体使用。另外C++中struct还可以用来定义类。和class定义类是一样的,区别是struct定义的类默认访问权限是public,class定义类默认访问权限是private。 注意:访问限定符只在编译时有效,当数据映射到内存1后,没有任何访问限定符的区别

4.2 封装

将数据和操作方法进行有机结合,隐藏对象的属性和实现细节,仅公开对外接口和对象进行交互。 封装的本质是一种管理,让用户更方便使用类。 就像诸多的电子产品,即使内部结构复杂,但对于使用者来说,不需要区关心它们的内部核心部件,只需要操作其暴露在外部的按钮就可以了,让用户与其完成交互。 在C++语言中实现封装,可以通过将数据以及操作数据的方法进行有机的结合,通过访问权限来隐藏对象内部的细节,控制那些方法可以在类外部直接被使用。

5.类的作用域

类定义了一个新的作用域,类的所有成员都在类的作用域中。在类外定义成员时,需要使用::作用域操作符来指明成员属于哪个类域。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Person
{
public:
	void PrintPersonInfo();
private:
	char name_[20];
	char age_;
};

//指定类域
void Person::PrintPersonIn()
{
	//...
}

6.类的实例化

用类类型创建对象的过程,称为类的实例化

  1. 类是对对象进行描述的,是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它;比如:入学时填写的学生信息表,表格就可以看成一个类,来描述学生的信息。
  2. 一个类可以实例化出多个对象,实例化出的对象,占用实际的物理空间,存储类成员变量。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main()
{
	Person yui;//实例化对象
	yui.age_ = 18;//初始化
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
零基础学Docker【3】 | 一文带你快速进行Docker实战
前言 本篇是零基础学Docker系列的第三篇文章,在上一篇文章? 一文带你快速学习Docker常用命令中,已经为大家讲解了一些在Docker中常用的命令。本篇我们将对之前学过的内容进行
大数据梦想家
2021/01/27
4780
零基础学Docker【3】 | 一文带你快速进行Docker实战
Docker 常用命令
一、常用命令 基本命令 docker version docker info docker --help 官方文档:https://docs.docker.com/reference/ 镜像命令 查看镜像: // 查看所有的镜像 docker images // 可选参数 Options: -a, --all Show all images (default hides intermediate images) --digests Show dige
wsuo
2020/07/31
3640
Docker 常用命令
Docker(38)- docker 实战一之安装 Nginx
背景 参考了狂神老师的 Docker 教程,非常棒! https://www.bilibili.com/video/BV1og4y1q7M4?p=14 #1. 搜索镜像 search 建议大家去doc
小菠萝测试笔记
2021/07/08
3580
【Docker】004.2-Docker部署Tomcat
訾博ZiBo
2025/01/06
910
【Docker】004.2-Docker部署Tomcat
docker的端口映射_docker swarm 网络
docker run -itd -p 宿主机ip:宿主机端口:容器端口 –name 容器名 镜像名 /bin/bash
全栈程序员站长
2022/11/10
1.1K0
docker的端口映射_docker swarm 网络
Docker 实用学习笔记(看这一篇就足够了)
开始 -> Docker 在本机寻找对象 -> 判断本机是否有这个镜像 -> 没有则去下载 Docker Hub 这个镜像 —> 找不到镜像就返回错误(否则就下载镜像到本地)
Gorit
2021/12/08
2.5K0
Docker 实用学习笔记(看这一篇就足够了)
docker(常用软件安装)
我们每次改动nginx配置文件,都需要进入容器内部?十分麻烦,我要是可以在容器外部提供一个映射路径,达到在容器外部修改文件名,容器内部就可以自动修改?-v 数据卷 技术!
崔笑颜
2020/10/27
1K0
docker(常用软件安装)
简易入门:使用Docke 部署一个tomcat服务
此时浏览器访问8080端口,显示404,其实服务已经部署好了。只是官方镜像一般是精简版的,所以webapps目录下没有内容。但是webapps.dist是有默认内容的,我们可以进行以下操作,将其全部替换到webapps目录中去,再重新访问:
青山师
2024/10/10
1420
简易入门:使用Docke 部署一个tomcat服务
docker部署nginx, tomcat, elasticsearch
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名,转载请标明出处 最后编辑时间为: 2021/08/12 14:39
用户9347382
2022/01/10
2580
Docker安装 Tomcat
5、安装配置好镜像加速源(由于正常拉取镜像是从境外的docker官网拉取,建议设置镜像加速源) :轻量应用服务器 安装 Docker 并配置镜像加速源 - 最佳实践 - 文档中心 - 腾讯云 (tencent.com)
逸轩
2021/11/29
2.2K1
Docker安装tomcat
腾云先锋(TDP,Tencent Cloud Developer Pioneer)是腾讯云GTS官方组建并运营的技术开发者群体。这里有最专业的开发者&客户,能与产品人员亲密接触,专有的问题&需求反馈渠道,有一群志同道合的兄弟姐妹。
无敌小菜鸟
2022/05/05
1.4K0
Docker安装tomcat
Docker(39)- docker 实战二之安装 Tomcat
背景 参考了狂神老师的 Docker 教程,非常棒! https://www.bilibili.com/video/BV1og4y1q7M4?p=15 直接运行容器 本地找不到镜像会自动下载 --rm
小菠萝测试笔记
2021/07/08
3110
Docker实战:Linux环境安装Tomcat安装步骤
今天给大家分享docker安装Tomcat安装说明,服务器版本为Centos8,安装的tomcat版本为tomcat:8.5.38。
小明互联网技术分享社区
2023/10/17
1.2K0
Docker实战:Linux环境安装Tomcat安装步骤
Docker:十五分钟快速了解Docker快速部署nginx
开发 和 运维 问题:在我的电脑上可以运行,版本更新,导致服务不可用!对于运维来说,考验十分的大
冷环渊
2021/11/10
7250
docker安装tomcat
本文共 59 个字数,平均阅读时长 ≈ 1分钟 1.拉取docker镜像 docker pull tomcat:9.0.71-jre8-temurin-focal 2.创建容器 做webapps的文件映射,将容器中的webapps文件夹映射到外部 图片 3.进入容器 docker exec -it tomcat1 /bin/bash 4.将容器内webapps.dist中自带应用复制到webapps(解决404) cp -r webapps.dist/* webapps 5.解决管理界面403问
小东东
2023/03/20
7600
docker安装tomcat
Docker 软件安装
tomcat 版本网址:https://registry.hub.docker.com/_/tomcat (opens new window)
用户9615083
2022/12/25
1.7K0
Docker 软件安装
【Docker】006-Docker镜像原理
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件;
訾博ZiBo
2025/01/06
1190
【Docker】006-Docker镜像原理
Docker Review - docker部署Tomcat & Nginx
进入 tomcat 容器 ,发现webapps 下面什么都没有 , 阿里云镜像 默认是最小的镜像,所有不必要的都剔除了,保证最小可运行环境
小小工匠
2021/10/08
4110
Docker教程(超全总结)[通俗易懂]
如果需要通俗地描述容器的话,我觉得容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说的容器存放的东西可能更偏向于应用比如网站、程序甚至是系统环境。
全栈程序员站长
2022/11/04
3.3K0
Docker教程(超全总结)[通俗易懂]
docker部署服务器_docker服务启动
这样子部署好简单,但是我们每次想要修改配置都需要进入容器内部来修改nginx的配置,这样很麻烦,怎么样才能不进入容器直接在外部进行修改呢?(可以使用数据卷 -v的技术)
全栈程序员站长
2022/11/08
2K0
相关推荐
零基础学Docker【3】 | 一文带你快速进行Docker实战
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验