面向对象程序设计之从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++新增加的,是被引用变量的一个别名,主要用于调用函数时传递参数和返回值,采用地址传递方式。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构与算法06-树结构(二叉树)

介绍 树也是基于结点的数据结构&#xff0c;但树里面的每个结点&#xff0c;可以含有多个链分别指向其他多个结点。 基于树的数据结构有很多种&#xff0c;但本章只关注其中一种——二叉树。二叉树是一种遵守以下规则的树。 每个结点的子结点数量可为 0、1、2。如果有两个子…

码蹄杯 2024 初赛第一场

MC0301 求个最大值 code: #include<bits/stdc.h> #define int long long #define endl \nusing namespace std;int n;void solve(){cin >> n;int mx -1;for(int i 0;i < n;i ){int x; cin >> x;mx max(mx,x);}cout << mx << endl; }sig…

JAVA流程控制break,continue,goto

1.break在任何循环语句的主体成分&#xff0c;均可用break控制循环的流程。break用于强行退出循环&#xff0c;不执行循环中剩余的语句。&#xff08;break语句也在switch语句中使用&#xff09; 如图&#xff1a;break语句强行退出循环&#xff0c;结果输出1~30便结束&#xf…

防火墙基础基础篇:NAT转发功能之——Easy IP方式详解

防火墙基础基础篇&#xff1a;NAT转发功能之——Easy IP方式详解 1. 概念 Easy IP 是一种简化版的动态NAPT&#xff08;Network Address and Port Translation&#xff09;技术。在Easy IP中&#xff0c;我们只使用一个公网IP地址&#xff0c;无需建立公有IP地址池。这个公网…

【数据库专家揭秘】MySql数据库设计黄金法则,让你的数据更稳定、更高效!

文章目录 引言一、明确需求&#xff0c;合理规划二、规范命名&#xff0c;提高可读性三、选择合适的数据类型四、优化表结构五、性能优化六、注重安全性总结 引言 在当今数字化时代&#xff0c;数据库已成为企业信息管理的核心。而在众多数据库系统中&#xff0c;MySql以其稳定…

jar包部署到服务器,修改jar包配置文件

jar包部署到服务器 打包项目1.jar包分离2.整体打包配置文件配置文件分离整体打包修改配置文件 打包项目 maven项目打包有两种&#xff0c;一是将自己的项目和依赖包分离&#xff0c;二是打包成一个jar包 1.jar包分离 需要在pom文件中引入依赖 <build><finalName&…

积鼎流体仿真软件VirtualFlow: 锂电池液冷散热数值计算

电池包在运作的时候会产生大量的热&#xff0c;热会在电池包内积累&#xff0c;随着车辆的使用&#xff0c;电池包内的部件会老化损伤&#xff0c;安全隐患极高&#xff0c;如何给电池包散热就显得非常重要。本文采用积鼎VirtualFlow对电芯、冷板以及冷却液进行散热仿真计算&am…

进程线程(一.2)

进程与线程&#xff08;一&#xff09; 并发编程并发与并行高并发 进程特征什么是进程&#xff1f;线程&#xff1f;进程与程序的区别进程与线程区别进程的五状态进程的种类 查看进程命令ps auxps axjpstreekill 进程的创建fork函数fork总结vfork函数fork与vfork区别 获取进程I…

30天变现5位数,涨粉2w,用AI做治愈系插图,太香了!(附工具教程)

大家好&#xff0c;我是设计师阿威 前段时间和一位朋友聊天&#xff0c;他说现在靠 AI 赚到钱&#xff0c;基本不可能&#xff01; 我竟然一时不知道说什么好。 虽然我并不认同他的说法&#xff0c;但也没有再说什么了。 因为人们往往会根据自己已有的认知体系&#xff0c;…

vivado BD_ADDR_SPACE、BD_CELL

描述 地址空间或bd_addr_space对象是一个分配的逻辑可寻址空间 主机接口上的内存&#xff0c;或连接到AXI主机的AXI接口端口上的内存 块设计外部。 Vivado Design Suite的IP集成商遵循行业标准IP-XACT数据 用于捕获内存需求和功能的格式。有些区块可以有一个 与多个主接口相关联…

电力电子功率模块在工程应用中测温NTC的使用

电力电子功率模块在工程应用中测温NTC的使用 1.概述2.什么是NTC3.模块内部NTC3.1 绝缘隔离措施3.2 NTC热量考虑 4.使用模拟方法测量NTC温度4.1 分压电阻大小 5.使用数字方法测量NTC温度 1.概述 最近做项目的时候突然被问到一个问题。做实验测温用的NTC到底怎么用&#xff1f;为…

【西瓜书】5.神经网络

1.概念 有监督学习正向传播&#xff1a;输入样本---输入层---各隐层---输出层反向传播&#xff1a;误差以某种形式在通过隐层向输入层逐层反转&#xff0c;并将误差分摊给各层的所有单元&#xff0c;以用于修正各层的权值激活函数&#xff1a;也叫阶跃函数&#xff0c;目的是引…

特征工程技巧——字符串编码成数字序列

这段时间在参加比赛&#xff0c;发现有一些比赛上公开的代码&#xff0c;其中的数据预处理步骤值得我们参考。 平常我们见到的都是数据预处理&#xff0c;现在我们来讲一下特征工程跟数据预处理的区别。 数据预处理是指对原始数据进行清洗、转换、缩放等操作&#xff0c;以便为…

深入理解序列化:概念、应用与技术

在计算机科学中&#xff0c;序列化&#xff08;Serialization&#xff09;是指将数据结构或对象状态转换为可存储或传输的格式的过程。这个过程允许将数据保存到文件、内存缓冲区&#xff0c;或通过网络传输至其他计算机环境&#xff0c;不受原始程序语言的限制。相对地&#x…

MySQL(三) - 基础操作

一、索引 由于我们在使用数据库的时候&#xff0c;大部分操作的都是查询操作&#xff0c;但是我们每一次进行查询都需要遍历一遍表中所有数据&#xff0c;这会花费O(n)的时间&#xff0c;因此数据引入了“索引” 也就是在底层使用了数据结构来进行优化查询的操作&#xff0c;但…

C++ Primer 第五版 第15章 面向对象程序设计

面向对象程序设计基于三个基本概念&#xff1a;数据抽象、继承和动态绑定。 继承和动态绑定对编写程序有两方面的影响&#xff1a;一是我们可以更容易地定义与其他类相似但不完全相同的新类&#xff1b;二是在使用这些彼此相似的类编写程序时&#xff0c;我们可以在一定程度上…

java面试题及答案2024,java2024最新面试题及答案(之一)

发现网上很多Java面试题都没有答案&#xff0c;所以花了很长时间搜集整理出来了这套Java面试题大全&#xff0c;希望对大家有帮助哈~ 本套Java面试题大全&#xff0c;全的不能再全&#xff0c;哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别&#xff1f; JDK&#xff1a;Ja…

day26-单元测试

1. 单元测试Junit 1.1 什么是单元测试&#xff1f;&#xff08;掌握&#xff09; 1.2 Junit的特点&#xff1f;&#xff08;掌握&#xff09; 1.3 基本用法&#xff1a;&#xff08;掌握&#xff09; 实际开发中单元测试的使用方式&#xff08;掌握&#xff09; public class …

开源利器AnythingLLM:你的私人ChatGPT构建利器,支持主流多种大模型

开源利器AnythingLLM&#xff1a;你的私人ChatGPT构建利器&#xff0c;支持主流多种大模型 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备…

阿里云服务器接入百度云防护后显示502原因

最近&#xff0c;发现很多使用了阿里云服务器的网站出现502的情况 经百度云防护技术排查发现阿里云机房对百度云防护的IP进行了拦截&#xff0c;原因近期可能是百度云防护的IP请求过于频繁&#xff0c;导致阿里云机房策略把百度云的IP当成了攻击IP。 解决办法是提交工单让阿里…