文章目录

  • 一、面向过程到面向对象
  • 二、namespace的使用
  • 三、using的用法

一、面向过程到面向对象

1、面向过程编程思想
C语言是典型的面向过程编程语言,面向过程是一种以过程为中心的编程思想,通过分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向过程编程思想的核心:功能分解,自顶向下,逐层细化(程序=数据结构+算法)。面向过程编程语言存在的主要缺点是不符合人的思维习惯,而是要用计算机的思维方式去处理问题

2、面向对象三大特性
(1)封装
把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
类将成员变量和成员函数封装在类的内部,根据需要设置访问权限,通过成员函数管理内部状态。
(2)继承
继承所表达的是类之间相关的关系,这种关系使得对象可以继承另外一类对象的特征和能力。继承的作用:避免公用代码的重复开发,减少代码和数据冗余。
(3)多态
多态性可以简单地概括为“一个接口,多种方法",字面意思为多种形态。程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。

面向对象重用率低、易维护,关于面向过程与面向对象的区别,可以看成盖饭与炒饭的区别,盖饭中的菜与饭是分开的,若需要将菜去除掉可以很容易;但是在炒饭中,菜与饭是炒在一起的,想要去除里面的菜则会变得很麻烦。

二、namespace的使用

1、命名空间的使用

  • 命名空间下可以存放变量、函数、类、结构体等
  • 命名空可以重名:重名的命名空间相当于做了个合并操作
  • namespace可以嵌套
  • 声明一段命名空间 ,且必须定义在全局范围内
  • 练习代码
#include <iostream>  //标准输入输出流
using namespace std;  //声明一段命名空间 ,且必须定义在全局范围内 namespace A
{int a= 120;void fun(){cout << "我在namespace中!" << endl;}struct st{};class obj{};
}
namespace B
{int a= 99;int b= 990;
}
namespace B
{int c= 9990;namespace C{int c= 1;}
}
int main()  //main函数应该是int类型,不能是void
{cout << A::a << endl;  //输出作用域A下的变量a cout << B::a << endl;  //输出作用域B下的变量a A::fun();  //调用命名空间内的函数 cout << B::c << endl;  //输出重名命名空间内的变量 cout << B::C::c << endl;  //输出嵌套 命名空间内的变量 return 0;
}

2、若在命名空间内声明了函数,那么在全局作用域内定义该函数时必须用::表示出作用域。
同时,在调用该函数时也需要加上作用域标识符::

#include <iostream>  //标准输入输出流
using namespace std;  //声明一段命名空间 ,且必须定义在全局范围内 namespace AA
{void fun1(int x);  //对fun1函数进行声明,但没有定义和初始化
}
void AA::fun1(int x)  //对fun1函数进行定义
{cout << "I am "  << x << endl;
}
int main()
{AA::fun1(9420);return 0;
}
  • 如果命名空间没有名字,那么这个命名空间内的所有成员都被编译器加上了static修饰。也就是静态的,只能在当前文件使用,有了内部链接属性。
  • 命名空间也是可以取别名的 比如有了AA命名空间,使用namespace NewAA= AA; ,也就是给AA取了个别名叫NewAA,调用时用法和AA是一模一样的了 。

三、using的用法

1、using的基本用法

#include <iostream>  //标准输入输出流
using namespace std;  //声明一段命名空间 ,且必须定义在全局范围内 namespace spA
{void fun1(int x)  //对fun1函数进行定义 {cout << "I am "  << x << endl;} int a=9;
}int main()
{using spA::fun1;fun1(9420);//若没使用using则需要这样调用命名空间内的函数,spA::fun1(9420);  using spA::a;cout << a << endl;return 0;
}

2、当using声明的标识符和其他标识符有作用域的冲突时,会产生二义性(编译器无法确定该调用哪个) ;
此时可以使用using编译指令来解决,这样就可以与命名空间外的同名变量公平竞争,就近原则,它使得整个命名空间的标识符可用 。

#include <iostream>  //标准输入输出流
using namespace std;  //声明一段命名空间 ,且必须定义在全局范围内 namespace AA
{int a= 12;
}
int main()
{int a= 99;using namespace AA;cout << "使用using namespace ×× 的结果:" << a << endl;return 0;
}

3、使用using时的注意点
需要记住的关键问题是当引入一个全局的using编译指令时,就为该文件打开了该命名空间,它不会影响任何其他的文件,所以可以在每一个实现文件中调整对命名空间的控制。比如,如果发现某一个实现文件中有太多的using指令而产生的命名冲突,就要对该文件做个简单的改变,通过明确的限定或者using声明来消除名字冲突,这样不需要修改其他的实现文件。

从C语言到C++的进阶之面向对象、using与命名空间(篇四)相关推荐

  1. Android日志[进阶篇]四-获取错误报告

    Android日志[进阶篇]一-使用 Logcat 写入和查看日志 Android日志[进阶篇]二-分析堆栈轨迹(调试和外部堆栈) Android日志[进阶篇]三-Logcat命令行工具 Androi ...

  2. c语言使用node类型指针,C语言利用 void 类型指针实现面向对象类概念与抽象

    不使用C++时,很多C语言新手可能认为C语言缺乏了面向对象和抽象性,事实上,C语言通过某种组合方式,可以间接性的实现面对对象和抽象. 不过多态和继承这种实现,就有点小麻烦,但是依然可以实现. 核心: ...

  3. 应用统计学与R语言实现笔记(番外篇四)——bookdown使用与OR值计算

    本期是之前做的应用统计学与R语言实现笔记的番外篇四,本期主要关注两个问题,一个是重新利用R的bookdown包创建新的电子书,另一个是计算公共卫生当中一个比较常见的指标OR值. 文章目录 1 book ...

  4. APC控制Linux关机,NAS进阶 篇四:利用APCPowerchuteNetworkShutdown实现断电自动关闭虚拟机...

    NAS进阶 篇四:利用APCPowerchuteNetworkShutdown实现断电自动关闭虚拟机 2020-02-05 21:50:25 20点赞 118收藏 16评论 在2018年写<NA ...

  5. [C语言][数据存储+指针进阶]关关难过关关过 迈向光明之路 而我义无反顾 冲

    //数据在内存的存储 //整形: char也归纳为了整形类型了  因为char字符对应的是ASCII值(相对应的具体数字) #include<stdio.h> int main()//调试 ...

  6. C语言三子棋游戏进阶版详解(包括多子棋)

    目录 一,总体思路介绍 二,具体思路的实现 1.初始化游戏界面 2.初始化棋盘 3.打印棋盘 4.玩家移动 5.电脑移动 6.判断输赢 三,源码展示 game.h game.c test.c 一,总体 ...

  7. 『C语言从入门到进阶』第 ⑥ 期 - 初识指针

    学习导航:> 1.指针是什么? 2.指针和指针类型 2.1指针+-整数 2.2指针的解引用 3.野指针 3.1野指针成因 3.2如何规避野指针 4.指针运算 4.1指针+-整数 4.2指针-指针 ...

  8. C语言程序设计 | 指针的进阶(一):字符指针、数组指针、指针数组、函数指针

    指针的进阶(一)目录: 字符指针 数组指针和指针数组 函数指针 字符指针 在开始讲解这一章节之前,我们需要了解指针前面声明的类型的意义 类型 * 指针名 对于指针来说,我们在给指针进行声明时,我们声明 ...

  9. c语言2阶数组指针,C语言的指针(进阶篇章之二)

    指针遇到数组,不得不说的"秘密" 说起数组array[i]来,我们都知道:数组名"array"是数组的唯一标识符,数组名代表数组首元素的地址. 而今天的主角-- ...

最新文章

  1. 安装完python怎么打开安装步骤-Python安装与运行测试详细教程,带你攻克第一个学习难关...
  2. Zookeeper3.4.11+Hadoop2.7.6+Hbase2.0.0搭建分布式集群
  3. php 5.3配置,php-5.3.3 说明及配置
  4. C#入门详解(14)
  5. Linux 临时表空间满了,Temporary表空间100%解决方案
  6. python创建sqlite3 unicode error_python/sqlite3:发生异常:sqlite3.operationalerror
  7. QGrapicsScene类
  8. Android 游戏引擎汇总
  9. 好程序员web前端分享常见html5语义化标签
  10. VSTO 3.0 for Office 2007 Programming
  11. 图像算术编码 matlab,实验二:算术编码及MATLAB实现.doc
  12. 不卖菜,互联网巨头应该卖什么?
  13. 音乐播放器 - iOS开发
  14. 【39】给定一个无重的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复
  15. C++中的数学函数汇总
  16. id门禁卡复制到手机_怎么把手机变成门禁卡 手机NFC复制门禁卡图文教程
  17. Mysql:外码约束
  18. c语言编程等腰三角形,用c语言编辑一个等腰三角形的讲解过程 一个等腰三角形怎么平均分成三个面积相等的三角形?...
  19. nginx 实现备案域名的配置 + 跨域配置
  20. 归一化数字角频率_数字信号处理中的归一化频率

热门文章

  1. 正则表达式 以字符串开头_干货-Shell编程之正则表达式
  2. 白月黑羽教python_白月黑羽Python在线教程
  3. generator.xml mysql_Mybatis 使用generator.xml生成实体及mapper
  4. 修改外部时间服务器地址,修改外部时间服务器地址
  5. 百度搜索关键字抓取_怎么使百度竞价的效益最大化
  6. java label 超链接_Swing之带超链接的label简单实现。
  7. 中的挂起是什么意思_仪表板亮奇怪指示灯,乌龟晒太阳是什么意思?老司机:不懂别上路...
  8. dataset中的数据批量导入oracle数据库,C#如何把某个文件夹下的所有Excel文件导入Oracle数据库。详细点!...
  9. 为什么要使用计算机协议,为什么需要网络协议
  10. pads中如何设置等长_标签打印软件中标签间距以及边距如何设置