(面试)谈谈我对C++面向对象特性的理解

💯 博客内容:C++读取一行内个数不定的整数的方式

😀 作  者:陈大大陈

🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信!

💖 欢迎大家:这里是CSDN,我总结知识和写笔记的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

 

目录

对象是什么?

C语言和C++区别

CVSC++

什么是object-oriented


对象是什么?

什么是对象,对象就是一个东西,那什么是东西呢?

对象可以是可见的,也能是不可见的,他可以是一句话,也可以是一个杯子。

在程序设计里,变量就是对象。变量有类型,决定了变量里面存什么,对象一样有类型。

不同的对象有不同的特性,里面有一些数据时被保护起来的,外面是一些操作。

我们可以通过这些操作或者说是服务来访问数据,却不能直接访问受保护的数据。

两者的关系如图所示。

面向过程和面向对象的区别在于 如何去描述,描述什么。

C语言和C++区别

比如有一个人去菜市场买菜,如果用C语言来描述,就是按照时间顺序来描述事情发生的过程,买家张三买了一捆白菜,然后店主李四帮他称菜等等。

如果用C++来描述的话,就是描述事件中的对象,店主李四的吆喝传到张三的耳朵里,张三听到声音,他可能去买菜,也可能不去,这取决于白菜的价钱,说到白菜,又有了白菜的日期,产地,大小等等信息,C++就是描述对象以及对象间的关系。

从程序设计的角度来看的话,如果要设计一个打印三个整形的程序。

C语言来写的话是这样:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
typedef struct print3d
{int x;int y;int z;
}Print3d;
void print3d_print(const Print3d* pd)
{printf("%d %d %d\n", pd->x, pd->y, pd->z);
}
Print3d a;int main()
{a.x = 1, a.y = 2, a.z = 3;print3d_print(&a);return 0;
}

C++来写的话则是这样:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class print3d
{
public:print3d(int a=1, int b=2, int c=3):_a(a),_b(b),_c(c){}void print(){cout << _a<<' ' << _b <<' ' << _c << endl;}private:int _a;int _b;int _c;
};
int main()
{print3d().print();
}

在C++的代码里,print3d()是一个匿名对象,我们要它来执行print这个操作。

CVSC++

我们看到,C语言的struct里面,只有数据

而C++的class里面,既有数据,也有操作。

C语言的代码,操作在结构体外面,所以要执行打印操作,需要传结构体的指针进去。

C++的代码,操作在结构体内部,所以当你要它做什么操作,对象自己就会操作,而不需要像C语言一样将对象的地址传到函数里面去。

什么是object-oriented

总的来说,面向对象是一种方法,这种方法是用来组织设计和实现的。

组织设计就是找到解决问题的思路。

实现就是把代码写出来。

面向对象关键的核心在于,对象是组织和实现主要关注的东西,而不是过程。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA的使用(一) (IntelliJ IDEA 2022.1.3版本)

目录 1. IDEA项目结构 2. 模块的导入操作 2.1 正规操作 2.2 取巧操作 2.3 出现乱码 2.4 模块改名 3. 代码模板的使用 后缀补全&#xff08;Postfix Completion&#xff09;、实时模板&#xff08;Live Templates&#xff09;菜单里面什么介绍都有&#xff0c;可以自学&a…

根据您的数据量定制的ChatGPT,改变客户服务的方式

在当今竞争激烈的商业环境中&#xff0c;提供优质的客户服务对于保持忠诚的客户群和推动业务增长至关重要。客户满意度已成为各行各企业的首要任务&#xff0c;因为它直接影响客户留存和品牌声誉。随着技术的进步&#xff0c;公司不断探索创新解决方案&#xff0c;以增强客户服…

arm 点灯实验代码以及现象

.text .global _start _start: 1.设置GPIOE寄存器的时钟使能 RCC_MP_AHB4ENSETR[4]->1 0x50000a28 LDR R0,0x50000A28 LDR R1,[R0] ORR R1,R1,#(0x1<<4) 第4位置1 STR R1,[R0] 1.设置GPIOF寄存器的时钟使能 RCC_MP_AHB4ENSETR[4]->1 0x50000a28 LDR R…

vue实现拖拽排序

在业务中列表拖拽排序是比较常见的需求&#xff0c;常见的JS拖拽库有Sortable.js&#xff0c;Vue.Draggable等&#xff0c;大多数同学遇到这种需求也是更多的求助于这些JS库&#xff0c;其实&#xff0c;使用HTML原生的拖放事件来实现拖拽排序并不复杂&#xff0c;结合Vue的tra…

【代码随想录】LC 209. 长度最小的子数组

文章目录 前言一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 三、知识风暴 前言 本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记&#xff0c;如有侵权&#xff0c;立即删除。 一、题目 1、原题链接 209. 长度最小的子数组 2、题目…

Python接口自动化测试 —— Selenium+pytest+数据驱动

主流自动化框架 selenium &#xff1a;web端自动化框架 &#xff0c;&#xff08;行业里面最核心的框架&#xff09; appium &#xff1a;手机app端框架 requests &#xff1a;接口测试 selenium 工具类封装 selenium提供了很多方法供我们去完成网页元素的操作&#xff0c; …

二、Excel VBA 简单使用

Excel VBA 从入门到出门一、Excel VBA 是个啥&#xff1f;二、Excel VBA 简单使用 &#x1f44b;Excel VBA 简单使用 ⚽️1. 如何在Excel中手动编写VBA代码⚽️2. 如何在 Excel 中运行 VBA 代码⚽️3. 如何在Excel中记录VBA代码⚽️4. 如何在Excel中编辑录制的VBA代码⚽️5. 如…

nginx-proxy反向代理缓存

介绍&#xff1a; 反向代理缓存&#xff0c;类似于动静分离&#xff0c;即通过nginx代理服务器根据客户端发送的url请求&#xff0c;去后台服务器获取数据&#xff0c;将静态数据缓存到nginx代理服务器上&#xff0c;并配置有过期时间&#xff0c;当客户端下次以相同的url请求…

屏幕分辨率:PC / 手机 屏幕常见分辨率,前端如何适配分辨率

一、常见的PC屏幕分辨率 序号水平像素点数和垂直像素点数也被称为常见显示器11366 768720p 或 HD Ready常见于笔记本电脑和低端桌面显示器21920 10801080p 或 Full HD / 全高清高端笔记本电脑和中高档台式机32560 14402K 分辨率常见于高端笔记本电脑和高端台式机43840 216…

基于SSM+Vue的订餐系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Spring Cloud父子容器及容器的启动源码

1.前言 接触过Spring Cloud都知道&#xff0c;服务启动的时候会先启动Spring Cloud容器加载bootstrap.yml的配置&#xff0c;然后再启动我们常说的Spring容器&#xff0c;那么为什么需要父子容器&#xff0c;父容器又是在什么地方进行创建的呢&#xff1f; 2. 为什么需要父子…

JS-前端在dom中预览pdf等文件

1、将pdf等文件显示到dom元素中预览 pdf文件可以是blob、url、file类型等只要使用URL.createObjectURL(file)全部转为URL即可使用无需借助任何插件&#xff0c;只需要使用<object></object>标签即可实现 1.1、html <template><div class"home"…