当前位置: 首页 > news >正文

面向对象程序设计之从C到C++的初步了解

1. C++语言

1. C++的发展 

C++是从C语言发展演变而来的,首先是一个更好的C引入了类的机制,最初的C++被称为“带类的C”1983年正式取名为C++
从1989年开始C++语言的标准化工作
于1994年制定了ANSIC++标准草案
于1998年11月被国际标准化组织(ISO)批准为国际标准,成为目前的C++
 

2.C++的特点
(1)C++保持与C兼容
(2)用C++编写的程序可读性更好,代码结构更为合理,可直接地在程序中映射问题空间的结构。
(3)生成代码的质量高,运行效率仅比汇编语言代码段慢10%到20%。
(4)从开发时间、费用到形成的软件的可重用性、可扩充性可维护性和可靠性等方面有了很大的提高,使得大中型的程序开发项目变得容易的多。支持面向对象的机制,可方便地构造出模拟现实问题的实体和操作。

2. C++程序的结构

 

3. C++程序编辑、编译和运行

C++程序的编辑、编译和运行C++源程序文件扩展名为.CPP
支持鲲鹏、Intel、高通等主流CPU机器
在Windows下,我们常用Visual C和VS开发环境来编辑、编译和运行C++程序。
在Linux下,vim编辑器,GCC编译器等
在Andoid下,C++Compile编译器等 

4. C++在C上的扩充

从C到C++的扩充(面向过程方面)
1. 注释行C++的输入输出
2. 灵活的局部变量说明
3. const修饰符
4. 内联函数
5. 带有默认参数的函数
6. 函数的重载
7. 作用域运算符
8. 运算符new和delete
9. 引用 

1. C++输入输出流
C++数据的输入与输出是通过I/O流来实现的,I/O流输入或输出的是一系列字节。
使用插入符“<<”向cout输出流中插入字符使用提取操作符  “>>”从cin输入流中抽取字符

#include<iostream>
using namespace std;int main()
{int i = 0;cout<<i;cin>>i;return 0;
}

2. 用const取代#define

C++建议,用const取代无参宏定义,消除了宏的不安全性。关于 const 的更多知识可以移步到相关文章:C语言: 关于const操作的简单理解

#include<iostream>
using namespace std;
int main()
{int a=l;const Tl=a+a;const T2=T1-T1;cout <<"T2 is"<<T2<<endl;return O; 
}
//输出:T2 is 0

3. 内联函数
声明时使用关键字: inline.
编译时在调用处用函数体进行替换,节省了参数传递、控制转移等开销。

注意:

内联函数体内不能有循环语句和switch语句;
使用内联函数是一种空间换时间的措施;

内联函数在第一次被使用之前必须进行声明或定义;
内联函数具有宏定义#define相同的作用和相似的机理,但消除了#define的不安全因素。

4. 带有缺省参数值的函数
C++允许函数的实参与形参个数不同.方法是: 在说明函数原型时(若没有说明函数原型,则应在函数定义时说明)为形参制定缺省值.调用时如给出实参,则采用实参值,否则采用预先给出的缺省形参值。 例如下图:

注意:
在函数原型中,所有参数从右向左缺省

int add(int x,int y=5,int z=6);//正确

int add(int x=1,int y=5,int z);//错误

int add(int x=1,int yint z=6);//错误

在函数调用时,若某个参数省略,则其后的参数皆应省略而采用缺省值。
init(20);  //正确
init( ,20); //错误
声明中给出了缺省值,定义中不要给出缺省值 

5. 作用域标识符::
两个同名变量, 一个是全局的,另一个是局部的,可用作用域标识符::表示引用全局变量 

#include<iostream>
using namespace std;
int aver;
int main()
{int avar;aver = 25;::aver = 10;//局部变量avar//全局变量avar::avar=10:cout<<"local avar ="<<avar<<endl:cout<<"global avar ="<<::avar<<endl:return 0;
}

7. 引用
引用的概念
引用通常被认为是某个变量的别名,声明一个引用的格式如下下:
类型 & 引用名 = 已定义的变量名

int i = 5;
int &j = i;//这里的i,j共用同一内存

注意:
引用除了用作函数的参数或返回类型外,在声明引用时必须立即对它进行初始化
引用不可重新赋值>
并不是任何类型的数据都可以引用,下列情形的引用声明都是非法的:
- 不允许对void进行引用
- 不能建立引用的数组
- 不能建立引用的引用
- 引用不能用类型来初始化
- 没有空引用 

小结:

1. C++引入const的使用,指针分为常量指针和指针变量,C++完全保留了C指针变量的一些特性。
2. C++允许把频繁调用的小代码函数指定为内联函数来提高执行速度,但这是用空间(程序容量)来换取时间(执行速度)
3. 带有缺省参数值的函数在类的构造函数中如果使用不当,会导致程序的二义性问题。
4. 引用是C++新增加的,是被引用变量的一个别名,主要用于调用函数时传递参数和返回值,采用地址传递方式。

相关文章:

  • 奶茶店、女装店、餐饮店是高危创业方向,原因如下:
  • 一个知识问答系统,用户的选择决定接下来出现的问题,且下一个问题的呈现取决于前面几个问题的回答
  • 工业4.0利器:MES系统
  • 在一个定义好的数据对象(class)中,后续更新时只更新其中部分数据,其余部分会恢复初始设置吗
  • Amazon云计算AWS(四)
  • typescript --object对象类型
  • 开发和渗透偷懒利器utools
  • 鲁教版七年级数学下册-笔记
  • OCR图片转Excel表格:没结构化的弊端
  • JS(DOM、事件)
  • 【MyBatis】MyBatis操作数据库(二):动态SQL、#{}与${}的区别
  • Amazon云计算AWS(二)
  • 发布 jar 包到 maven 中央仓库
  • 2024-06-03 问AI: 什么是TPU Pod?
  • 最小二乘法算法(个人总结版)
  • 【mysql】环境安装、服务启动、密码设置
  • ➹使用webpack配置多页面应用(MPA)
  • 2017前端实习生面试总结
  • 2019.2.20 c++ 知识梳理
  • Create React App 使用
  • CSS魔法堂:Absolute Positioning就这个样
  • Cumulo 的 ClojureScript 模块已经成型
  • MySQL-事务管理(基础)
  • Redis的resp协议
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • spring学习第二天
  • 笨办法学C 练习34:动态数组
  • 从PHP迁移至Golang - 基础篇
  • - 概述 - 《设计模式(极简c++版)》
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 漂亮刷新控件-iOS
  • 前嗅ForeSpider采集配置界面介绍
  • 前言-如何学习区块链
  • 悄悄地说一个bug
  • 微信开源mars源码分析1—上层samples分析
  • 我看到的前端
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 移动端高清、多屏适配方案
  • ​​​​​​​​​​​​​​Γ函数
  • ​HTTP与HTTPS:网络通信的安全卫士
  • #if等命令的学习
  • #Lua:Lua调用C++生成的DLL库
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #考研#计算机文化知识1(局域网及网络互联)
  • #数据结构 笔记一
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $(selector).each()和$.each()的区别
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (C)一些题4
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (ZT)一个美国文科博士的YardLife
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133