【带头学C++】----- 八、C++面向对象编程 ---- 8.1 面向对象编程概述

目录

8.1 面向对象编程概述

8.1.1 面向对象概念(OOP)

8.1.2 面向过程概念

8.2  :: 作用域运算符

8.3 命名空间namespace

8.3.1 C++的命名空间 namespace

8.3.2 命名空间 namespace使用语法

1. 创建一个命名空间:

2. 命名空间只能在全局范围内定义(错误示例) 

3. 命名空间嵌套命名空间

4. 命名空间是开放的,即可以随时把新的成员加入已有的命名空间中

5. 声明和实现分离

6. 无名命名空间

7. 命名空间别名

8.4 using 声明命名空间的成员可用


8.1 面向对象编程概述

8.1.1 面向对象概念(OOP)

面向对象(Object-Oriented)是一种编程范式,它将程序设计中的数据和操作封装成对象。面向对象的程序设计主要包括三个基本概念:封装、继承多态。

        封装(Encapsulation)是指将数据和操作封装在一个对象中,对象对外提供接口来访问和操作数据,同时隐藏具体的实现细节。这样做可以提高代码的可维护性、可重用性和安全性。类将成员变量和成员函数封装在类的内部,根据需要设置访问权限,通过成员函数管理内部状态。

        继承(Inheritance)是指通过定义新的类,这个新的类可以继承已有类(父类)的属性和方法。通过继承,新的类(子类、派生类)可以扩展或修改已有类的功能。继承可以减少代码的冗余,并支持代码的重用。

       多态(Polymorphism)是指同一操作可以作用于不同类型的对象上并产生不同的结果。多态性可以提高程序的灵活性和扩展性。通过多态,可以通过统一的接口来处理不同类型的对象,简化代码的编写和维护。多态 多态性可以简单地概括为“一个接口,多种方法”,字面意思为多种形态,程席在运行时才决定调用的函数,它是面向对象编程领域的核心。

        面向对象思想强调将问题拆分成一系列的对象,并通过对象之间的交互来解决问题。这种方法可以更好地模拟现实世界中的问题,使程序设计更加灵活和易于理解。

对象 = 算法 + 数据结构     程序 = 对象+对象+对象

       程序就是许多对象在计算机中相继表现自己,而对象则是一个个程序实体。面向对象编程思想的核心:应对变化,提高可复用。

8.1.2 面向过程概念

面向过程(Procedural)是一种编程范式,它将程序分解为一系列的过程或函数。在面向过程编程中,编程思想的核心: 功能分解,自顶向下,逐层细化(程序=数据结构+算法)。 面向过程编程语言存在的主要缺点是不符合人的思维习惯。而是要用计算机的思维方式去处理问题,而且面向过程编程语言重用性低,维护困难。

面向过程编程的特点包括:

1. 程序由一系列的函数组成:程序的逻辑被分解为多个函数,每个函数负责执行特定的任务。函数的输入和输出通常通过参数和返回值进行传递。

2. 基于顺序执行:在面向过程编程中,程序按照顺序执行函数,从头到尾依次执行各个操作步骤

3. 数据导向:数据在程序中起着重要的作用,函数通过参数来接受输入数据并返回结果数据,数据在函数之间进行传递和处理。

4. 相对简洁:面向过程的程序通常相对较简单,因为它们主要关注实现特定的功能,而不需要考虑对象之间的关系和状态的管理。

面向过程编程适用于一些简单和结构化的问题,例如批处理操作、算法实现等。它强调程序的过程和步骤,对于一些需要直观地描述操作流程的问题来说,面向过程编程是一种有效的方法。然而,对于复杂的问题和大型项目,面向对象编程通常更加灵活和可扩展。

8.2  :: 作用域运算符

:: 作用域运算符用来引用类或对象的成员。通过使用类名或对象名与作用域运算符,可以访问到类的静态成员(如静态变量和静态方法)或实例的成员(如实例变量和实例方法)。

(解决归属问题:谁是谁的谁)

8.3 命名空间namespace

8.3.1 C++的命名空间 namespace

       在C++中,命名空间(namespace)是一种用来组织代码的机制。它可以将相关的代码组织在一起,避免命名冲突,提高代码的可读性和可维护性。命名空间通过使用关键字namespace来定义,后跟命名空间的名称。命名空间中可以包含变量、函数、类、结构体等各种C++的成员。

       创建名字是程序设计过程中一项最基本的活动,当一个项目很大时,它会不可避免地包含大量名字。C++允许我们对名字的产生和名字的可见性进行控制。我们之前在学习(语言可以通过statiC关键字来使得名字只得在本编译单元内可见,在C++中我们将通过一种使用命名空间来控制对名字的访问。

8.3.2 命名空间 namespace使用语法

1. 创建一个命名空间:

namespace A {int a = 10;
}
namespace B {int a = 20;
}
void test06(){cout<<"A::a = "<<A::a <<endl;cout<<"B::a = "<<B::a <<endl;
}

2. 命名空间只能在全局范围内定义(错误示例) 

void test06(){namespace A {   //errorint a = 10;}namespace B {  //errorint a = 20;}cout<<"A::a = "<<A::a <<endl;cout<<"B::a = "<<B::a <<endl;
}

3. 命名空间嵌套命名空间

namespace A {int a = 10;namespace B {int a = 20;}
}void test06(){cout<<"A::a = "<<A::a <<endl;cout<<"A::B::a = "<<A::B::a <<endl;
}

4. 命名空间是开放的,即可以随时把新的成员加入已有的命名空间中

namespace A {int a = 10;
}
namespace A {void fuc(){cout << "hello C++"<<endl;}
}
void test06(){cout<<"A::a = "<<A::a <<endl;A::fuc();
}

5. 声明和实现分离

此时注意在Func命名空间里面进行定义了函数fuc1和fuc2两个函数,实现通过调用Fun::命名空间来实现这个函数体;

namespace Func {void fuc1();void fuc2(int num);
}
void Func::fuc1(){cout << "hello fuc1"<<endl;
}
void Func::fuc2(int num){cout << "fuc2: "<< num <<endl;
}
void test07(){Func::fuc1();Func::fuc2(666);
}

6. 无名命名空间

意味着命名空间中的标识符的作用域只能是在本文件内访问,相当于给这个标识符加上了static,使得其可以作为内部连接

7. 命名空间别名

namespace thisislongnamebuhaoyong{int  aa = 123;void LongNames(){cout<<"LongNameszzzzzzz"<<endl;};
}
void test09(){namespace shortname = thisislongnamebuhaoyong;cout<<"shortname::a "<<shortname::aa<<endl;thisislongnamebuhaoyong::LongNames();shortname::LongNames();
}

8.4 using 声明命名空间的成员可用

namespace A{int a1 = 123;int b = 123;void funA(){cout<<"funAlalala"<<endl;};void funB(){cout<<"funBHeHeHe"<<endl;};
}
void test10(){//1.使用命名空间域运算符cout<<A::a1<<endl;A::funA();//2.使用using声明成员可用using A::b;using A::funB;cout<<b<<endl;//直接打印b的值funB();//直接使用funB函数//3.注意同名冲突//int b = 100;//同文件下此时会产生命名冲突}

using 碰上函数重载情况时候:

namespace FunMain {void fund(){cout<<"this is null"<<endl;};void fund(int num){cout<<"num is :"<<num<<endl;};void fund(int x,int y){ cout<<x+y<<endl;};
}void test11(){using FunMain::fund;fund();fund(25);fund(5,8);}

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

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

相关文章

WIN10 x86环境部署ARM虚拟机(银河麒麟)

我们经常使用的是x86架构的cpu&#xff0c;而对于不同cpu架构的arm架构的操作系统&#xff0c;我们可以通过QEMU模拟器来进行模拟一个arm环境 1、部署前的准备 arm的镜像&#xff1a; 以此镜像为例&#xff1a;Kylin-Server-10-SP2-aarch64-Release-Build09-20210524.iso QE…

Co-DETR:DETRs与协同混合分配训练论文学习笔记

论文地址&#xff1a;https://arxiv.org/pdf/2211.12860.pdf 代码地址&#xff1a; GitHub - Sense-X/Co-DETR: [ICCV 2023] DETRs with Collaborative Hybrid Assignments Training 摘要 作者提出了一种新的协同混合任务训练方案&#xff0c;即Co-DETR&#xff0c;以从多种标…

人力资源管理后台 === 组织架构

目录 1.组织架构-树组件应用 2.组织架构-树组件自定义结构 3.组织架构-获取组织架构数据 4.组织架构-递归转化树形结构 5.组织架构-添加子部门-新建弹层组件 6.组织架构-添加子部门-表单结构 7.组织架构-添加子部门-表单基本校验 8.组织架构-添加子部门-表单业务校验 9…

什么是计算机病毒?

计算机病毒 1. 定义2. 计算机病毒的特点3. 计算机病毒的常见类型和攻击方式4. 如何防御计算机病毒 1. 定义 计算机病毒是计算机程序编制者在计算机程序中插入的破坏计算机功能或者破坏数据&#xff0c;影响计算机使用并且能够自我复制的一组计算机指令或程序代码。因其特点与生…

Redis面试题:分片集群相关问题

目录 面试官&#xff1a;redis的分片集群有什么作用 面试官&#xff1a;Redis分片集群中数据是怎么存储和读取的&#xff1f; 面试官&#xff1a;redis的分片集群有什么作用 候选人&#xff1a;分片集群主要解决的是&#xff0c;海量数据存储的问题&#xff0c;集群中有多个m…

0004Java程序设计-ssm基于微信小程序的校园第二课堂

文章目录 摘 要目录系统设计开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅&#x1f427;裙&#xff1a;776871563 摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。…

锐捷:下一代防火墙修改密码

一、背景 刚接到的任务&#xff0c;锐捷行业的一台下一代防火墙的管理密码和管理地址都忘记了&#xff0c;并且命令登陆也设置了密码&#xff0c;只能通过重置的方式来进行管理&#xff0c;配置了。 本案例是一台RG-WALL 1600-S3200。 二、配置思路 1、准备环境 2、收集设备软…

“2024杭州人工智能展览会”加快推进浙江省人工智能产业创新发展

杭州市人民政府加快推进人工智能产业创新发展&#xff0c;贯彻党的二十大精神和新的发展理念&#xff0c;把握人工智能技术演进趋势和创新发展新范式&#xff0c;以促进人工智能与实体经济深度融合为主线&#xff0c;以优质算力普惠供给为基础&#xff0c;到2025年&#xff0c;…

linux用户身份切换su和 sudo

su 切换root&#xff0c;但是&#xff0c;环境变量是之前用户的 可以看到利用su切换&#xff0c;根目录还是pro1的 su - 连同环境一起切换成root&#xff0c;切换后工作目录都不一样了&#xff0c;看输入内容左侧信息&#xff0c;和第一个图片比较 -c仅执行一次命令&#xff0…

【刷题笔记】H指数||数组||二分查找的变体

H指数 1 题目描述 https://leetcode.cn/problems/h-index/ 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一…

数据结构与算法之美代码:二分查找2

目录 二分查找的变形问题代码 二分查找的变形问题 代码 package com.athome.search;public class BinarySearchDemo {public static void main(String[] args) {int[] arr {1,3,4,5,6,8,8,8,11,18};int index1 bsearch1(arr, arr.length, 8);int index2 bsearch2(arr, arr.l…

第六节HarmonyOS UIAbility内页面的跳转和数据传递

一、页面跳转 在一个应用包含一个UIAbility的场景下&#xff0c;可以通过新建多个页面来实现和丰富应用的内容。这会涉及到UIAbility内页面的新建以及UIAbility内页面的跳转和数据传递。 打开DevEco Studio&#xff0c;选择一个Empty Ability工程模板&#xff0c;创建一个工程&…

MySQL数据库【一】

博学而笃志&#xff0c;切问而近思 文章目录 数据库简介服务器、数据库以及表的关系连接数据库数据库操作命令创建数据库查看数据库创建语句查看数据库使用数据库修改数据库删除数据库 数据库字符集和校验规则查看系统默认字符集查看系统默认校验规则查看数据库支持的字符集查看…

网工内推 | 外企网工,五险一金,弹性工作,最高30k*14薪

01 金蝶软件&#xff08;中国&#xff09;有限公司 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、合理规划公司网络&#xff0c;保障网络架构的合理性、可靠性及前瞻性&#xff1b; 2、负责公司网络运维&#xff0c;处理日常运维事件&#xff0c;保障网络的稳定可…

Arch Linux 安装 dwm 窗口管理器

窗口管理器是管理桌面上各种窗口的组件&#xff0c;主要功能有&#xff1a;窗口堆叠方式&#xff0c;窗口移动规则等。大多数人接触到的是堆叠式窗口管理器&#xff0c;一个窗口可以叠放在其他窗口之上&#xff0c;调整窗口的主要方式是鼠标。而dwm&#xff08;Dynamic Window …

Python(八十九)函数的参数的内存分析

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

振南技术干货集:znFAT 硬刚日本的 FATFS 历险记(9)

注解目录 1、znFAT 的起源 1.1 源于论坛 &#xff08;那是一个论坛文化兴盛的年代。网友 DIY SDMP3 播放器激起了我的兴趣。&#xff09; 1.2 硬盘 MP3 推了我一把 &#xff08;“坤哥”的硬盘 MP3 播放器&#xff0c;让我深陷 FAT 文件系统不能自拔。&#xff09; 1.3 我…

手机爬虫用Fiddler详细教程

如果你正在进行手机爬虫的工作&#xff0c;那么一款强大而又实用的网络调试工具Fiddler将会是你的好帮手。今天&#xff0c;我将和大家分享一份详细的Fiddler教程&#xff0c;教你如何使用它来轻松捕获和分析手机App的网络请求。让我们一起来探索Fiddler的功能和操作&#xff0…

Java 发送邮件

Java 发送邮件 使用Java应用程序发送E-mail十分简单&#xff0c;但是首先你应该在你的机器上安装JavaMail API 和Java Activation Framework (JAF) 。 你可以在 JavaMail (Version 1.2) 下载最新的版本。 你可以再 在JAF (Version 1.1.1)下载最新的版本。 下载并解压这些文…

你敢信?四行Python代码就能知道你那的天气!

今天给大家带来的Python实战项目是四行Python代码获取所在城市的天气预报&#xff0c;我们隐隐听到唏嘘声&#xff0c;不信四行Python代码可以获取是吗?那我们一起来看看&#xff1a; 四行Python代码就能知道你那的天气&#xff0c;你敢信&#xff1f; 使用Python获取天气预报…