C++ 结构体(面向对象编程)

面向对象编程的优势

  • 相比于分而治之的结构化程序设计,强调大处着眼的面向对象程序设计的思想,更适合于开发大型软件。
  • 得益于数据抽象、代码复用等面象对象的固有特征,软件开发的效率获得极大的提升,成本却大幅降低。

面向对象三大特征:封装、继承、多态。

结构体

#include <iostream>
using namespace std;struct Compleac{double i;double r;void init(double rr, double ii) {i = ii;r = rr; }double real() {return i;}double image() {return r;}
};int main(int argc, const char *argv[])
{Compleac a;a.init(3,5);cout << a.real() << " + " << a.image() << "i" << endl;return 0;
}

将数据和操作数据的函数包装在一起的主要目的就是实现的封装和隐藏。隐藏就是不让结构体外的函数直接修改数据结构中的数据,只能通过结构的成员函数对数据进行修改。但上面的代码显然没能做到这一点。为此C++中新增了3个访问权限限定符,用于设置结构体中数据成员和数据成员的访问权限。

  • public

                公有成员(函数、数据),可悲任何函数访问(结构体内和结构体外)

  • protected

                与继承有关

  • private

                私有成员(函数、数据),只能被结构体内部函数访问。

#include <iostream>
using namespace std;struct Compleac{
private:double i;double r;
public:void init(double rr, double ii) {i = ii;r = rr; }double real() {return i;}double image() {return r;}void set_real(double value) {i = value;}void set_image(double value) {r = value;}
};int main(int argc, const char *argv[])
{Compleac a;
//	a.i = 8;//因为private缘故无法直接修改a.init(3,5);a.set_real(8);a.set_image(10);cout << a.real() << " + " << a.image() << "i" << endl;return 0;
}

struct还是容易和传统C语言中的结构混淆,C++中引进了功能和struct相同,但更安全的数据类型:类。更安全是指结构体将所有成员都默认为public,不够安全;类中成员默认为private权限。

//语法格式
class 类名 {
private:成员类型成员类型
public:成员数据:成员数据:
protected:成员数据:成员数据:
};//特别注意;不要忘了
#include <iostream>
using namespace std;class Compleac{
private:double i;double r;
public:void init(double rr, double ii) {i = ii;r = rr; }double real() {return i;}double image() {return r;}void set_real(double value) {i = value;}void set_image(double value) {r = value;}
};int main(int argc, const char *argv[])
{Compleac a;
//	a.i = 8;//因为private缘故无法直接修改a.init(3,5);a.set_real(8);a.set_image(10);cout << a.real() << " + " << a.image() << "i" << endl;return 0;
}
#include <iostream>using namespace std;class stu {private:string m_name;int age;int num;
public:void set_name(const string & name) {m_name = name;}void set_age(int s_age) {age = s_age;}void set_num(int s_num) {num = s_num;}void who() {cout << "我叫" << m_name << "我今年" << age << "我的学号是" << endl;}
};int main(int argc, const char *argv[])
{stu s;s.set_name("小明");s.set_age(18);s.set_num(8499);s.who();return 0;
}

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

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

相关文章

Linux中磁盘管理与文件系统

目录 一.磁盘基础&#xff1a; 1.磁盘的结构&#xff1a; 2.硬盘的数据结构&#xff1a; 3.硬盘存储容量 &#xff1a; 4.硬盘接口类型&#xff1a; 二.MBR与磁盘分区&#xff1a; 1.MBR的概念&#xff1a; 2.硬盘的分区&#xff1a; 为什么分区&#xff1a; 2.表示&am…

10-让Java性能提升的JIT深度剖析

文章目录 JVM的语言无关性解释执行与JITC1、C2与Graal编译器C1编译器C2编译器 分层编译(了解即可)热点代码热点探测方法调用计数器回边计数器 编译优化技术方法内联锁消除标量替换逃逸分析技术逃逸分析的原理逃逸分析 JVM的语言无关性 跨语言&#xff08;语言无关性&#xff0…

浅谈技术架构的演进过程

前言 最近在学习Redis、Doctor相关技术知识&#xff0c;它们与分布式系统有着很大的关系。 而对于分布式系统&#xff0c;它本身就是随着业务的不断推进&#xff0c;技术架构不断演进而得到发展和实现的。而所谓的分布式系统&#xff0c;实际上就是想办法引入更多的硬件资源&am…

python 异步Web框架sanic

我们继续学习Python异步编程&#xff0c;这里将介绍异步Web框架sanic&#xff0c;为什么不是tornado&#xff1f;从框架的易用性来说&#xff0c;Flask要远远比tornado简单&#xff0c;可惜flask不支持异步&#xff0c;而sanic就是类似Flask语法的异步框架。 github&#xff1…

系统学习Python——装饰器:函数装饰器-[装饰器状态保持方案:外层作用域和全局变量]

分类目录&#xff1a;《系统学习Python》总目录 闭包函数&#xff08;带有外围def作用域引用和嵌套的def&#xff09;常常可以实现相同的效果&#xff0c;特别是用于像被装饰的最初咱数这样的静态数据时。然而在下面这个例子中&#xff0c;我们也需要外层作用域中的一个计数器&…

{MySQL} 数据库约束 表的关系 新增删除 修改 查询

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、数据库约束1.1约束类型&#xff1a;1.2 NULL约束1.3unique 唯一约束1.4 DEFAULT&#xff1a;默认值约束1.5 PRIMARY KEY&#xff1a;主键约束1.6 FOREIGN K…

Kaggle:数据科学竞赛的殿堂与个人成长的舞台

一、产品简介&#xff1a; 它是一个举办数据科学竞赛、托管数据库、编写和分享代码的在线平台。这个数据集就像一个超级大的信息库&#xff0c;包含了我们日常生活中的各种事情&#xff0c;比如电子游戏的销量啊&#xff0c;还有空气质量如何受到污染等等。这些信息都是现实中…

java面试题20

Java中的类加载机制可继续通过自定义类加载器来实现热部署、插件化和动态加载等功能&#xff0c;使得应用程序能够在运行时加载未知的类和资源。 什么是Java中的多线程&#xff08;Multithreading&#xff09;&#xff1f;它有什么作用&#xff1f; 答案&#xff1a;多线程是一…

排查格式化符与待格式化参数不一致导致的程序崩溃问题

目录 1、问题说明 2、初步分析 3、进一步分析 3.1、查看崩溃时的函数调用堆栈

车载毫米波雷达及芯片新趋势研究1--毫米波雷达与其它车载传感器互补,研发及量产门槛较高

1.1 毫米波雷达是利用毫米波电磁波波束工作的雷达&#xff0c;车载是首要应用场景  毫米波雷达是一种以波长位于1-10mm、频率在30-300GHz的电磁波作为放射波的雷达传感器。  毫米波雷达利用毫米波波束进行工作。①检测障碍物时&#xff1a; 直接通过有无回波确认&#xff…

[递归] 指数型枚举

题目描述 ​ 从 1−n 这 n 个整数中随机选取任意多个&#xff0c;每种方案里的数从小到大排列&#xff0c;按字典序输出所有可能的选择方案。 输入 ​ 输入一个整数 n。&#xff08;1≤n≤10&#xff09; 输出 ​ 每行一组方案&#xff0c;每组方案中两个数之间用空格分隔。…

06-C++ 类和对象-多态

类与对象 多态 1. 简介 一个事物的多种形态&#xff0c;简称多态。 物的多态 同一个人在不同人面前&#xff0c;角色不同 如&#xff1a; 在父母面前在对象面前在朋友面前在同事面前 事的多态 同一种事情&#xff0c;在不同情况下展现不同 如&#xff1a; 吃饭 中国人 筷子 …

8天狂收6100颗星,可商用!东京工业、麻省理工等开源Stream Diffusion

加州大学伯克利分校、东洋大学、东京工业大学、麻省理工学院和筑波大学等研究人员&#xff0c;联合开源了一款创新性实时交互图像生成框架——Stream Diffusion。 Stream Diffusion的技术创新点在于&#xff0c;将传统的顺序去噪变成流批处理去噪&#xff0c;消除了漫长的等待…

install mpirun

ubuntu install mpirun : sudo apt install mpich centos install mpirun: download mpich-4.1.2.tar.gz from Downloads | MPICH tar xf mpich-4.1.2.tar.gz cd mpich-4.1.2 ./configure --disable-fortran make;make install

vue项目hdr格式文件放在assets下rgbeloader.load获取不到问题解决

如下图 我再App.vue组件中这样写 艾特符号定位 告诉系统 要src下的assets下的xhdr下的xidis.hdr 但是运行项目 他会告诉你找不到这个资源 我们改一下 我们组件时 App.vue 与assets同在 src目录下 用 ./去找 这样也是找不到的 我们需要将它放在静态资源包public下 public路…

JS变量、作用域与内存

JavaScript是一种动态类型语言&#xff0c;它的变量声明和作用域有自己独特的规则。在JavaScript中&#xff0c;变量和作用域与内存管理密切相关&#xff0c;因此本文将深入探讨这些主题&#xff0c;以帮助我们更好地理解JavaScript中的变量、作用域和内存。 变量 在JavaScri…

CDSP考取的价值:成为数据安全认证专家的好处

哈喽IT的朋友们&#x1f44b;&#xff0c;今天想和大家聊聊一个超级有用的专业认证&#xff1a;CDSP&#xff0c;也就是数据安全认证专家。如果你在数据安全领域或者对这方面感兴趣&#xff0c;这个认证绝对值得你去考取哦&#xff01; 1.&#x1f393;提升专业性&#xff1a;获…

MCEWMDRMNDBootstrap.dll文件丢失,软件游戏无法启动,怎样下载修复

不少小伙伴反馈&#xff0c;在打开某些游戏或软件的时候&#xff0c;Windows会提示“MCEWMDRMNDBootstrap.dll文件丢失&#xff0c;软件无法启动”&#xff0c;不知道应该怎样办&#xff1f; 首先&#xff0c;我们先来了解“MCEWMDRMNDBootstrap.dll文件”是什么&#xff1f; …

单片机开发从小工到专家

有道无术&#xff0c;术尚可求&#xff1b;有术无道&#xff0c;止于术 背景 向单片机嵌入式开发小伙伴推荐了几本书&#xff0c;阅读量破10 1. 适用范围 2. 书籍推荐 书籍推荐 3. 大师介绍 大师介绍 4. 大师书籍编写逻辑 25年大师出版的关于&#xff1a;嵌入式单片…

如何破解新版 NVIDIA GRID vGPU License Server (DLS)

文章首发在我的个人网站 http://841973620.net/index.php/archives/dls-cracked.html 前排提醒&#xff0c;闲鱼有不法商家修改许可然后出售的&#xff0c;挂这儿给大家避个雷 众嗦粥汁&#xff0c;新版的licserver不再通过验证MAC地址进行授权&#xff0c;而改为上传本地凭…