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

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

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

相关文章

QT的窗口坐标和全局坐标

1、定义解释 窗口坐标&#xff1a;创建的窗口的坐标&#xff0c;以窗口左上角点为原点&#xff0c;横向往右为x轴正向&#xff0c;竖向往下为y轴正向。 全局坐标系&#xff1a;电脑屏幕的坐标系&#xff0c;以电脑屏幕左上角点为原点&#xff0c;横向往右为x轴正向&#xff0…

Ubuntu系统安装

目录 安装准备 安装步骤 虚拟机配置 系统安装 安装准备 Ubuntu系统镜像&#xff0c;虚拟机环境 虚拟机环境 使用的虚拟机软件为VMware Workstation 系统镜像 阿里镜像站&#xff1a;阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 (aliyun.com)https://developer.aliyun.com…

记一次使用mysql存储过程时,游标取值为空问题

call modify_collation(num,count_num) > 1146 - Table test.table_name doesnt exist > 时间: 0.009s 我在使用mysql存储过程时&#xff0c;打印时游标取值为空&#xff0c;报错找不到表。我的过程语句是这样的&#xff1a; drop procedure if exists modify_collation…

【电源专题】一体成型电感为什么需要注意耐压问题

对于电感,我们在电路上使用的很多,如升压、降压、滤波等电路中基本上使用到了电感。电感的种类有很多,电感从不同的角度会有不同的分类。如可以根据否屏蔽、工艺类型、磁性材料类型等可分为多类,这在文章:【分立元件】电感器(inductor)——简介中有做了一些简单的介绍。…

【Qt】之【项目】整理可参考学习的git项目链接(持续更新)

Tcp 通信相关 IM即时通讯设计 高并发聊天服务&#xff1a;服务器 qt客户端&#xff08;附源码&#xff09; - DeRoy - 博客园 未使用protobuf通讯协议格式 github&#xff1a;GitHub - ADeRoy/chat_room: IM即时通讯设计 高并发聊天服务&#xff1a;服务器 qt客户端 QT编…

Redis中大Key与热Key的解决方案

原文地址&#xff1a;https://mp.weixin.qq.com/s/13p2VCmqC4oc85h37YoBcg 在工作中Redis已经成为必备的一款高性能的缓存数据库&#xff0c;但是在实际的使用过程中&#xff0c;我们常常会遇到两个常见的问题&#xff0c;也就是文章标题所说的大 key与热 key。 一、定义 1.1…

python使用反射创建对象问题

在python中没有发现类似j ava可以使用全限定类名创建对象的方法。 例如&#xff1a;java可以使用Class.forName(全限定类名)这样就可以简单的创建一个对象了。 python中也可以使用反射方式创建对象&#xff0c;稍微比较复杂。 第一步&#xff1a;导入py文件模块 # test_valida…

THS6011启动控制台后无法使用https访问控制台(by yz+lqw)

原因&#xff1a; 6011相对于6010版本&#xff0c;多了一个ssl的开关&#xff0c;下图是6010版本的参考配置&#xff1a; 而6011版本下的conf目录下的http.yaml&#xff0c;里面的ssl开关&#xff0c;默认是关闭的&#xff0c;也就是enable:false. 所以需要把enable&#xf…

构建LangChain应用程序的示例代码:9、使用Anthropic API生成结构化输出的工具教程

使用Anthropic API生成结构化输出的工具 Anthropic API最近增加了工具使用功能。 这对于生成结构化输出非常有用。 ! pip install -U langchain-anthropic可选配置&#xff1a; import osos.environ[LANGCHAIN_TRACING_V2] true # 启用追踪 os.environ[LANGCHAIN_API_KEY…

echarts-series的x,y轴的规则

series的data与x,y轴的匹配规则 如果series的data为[1,2,3,4,5,6] 1.如果x,y轴都是类目轴&#xff0c;且data没有与x,y轴的值匹配上&#xff0c;则无效。 2.如果x,y轴都为类目,data中能够跟类目轴上的字符串对应上&#xff0c;轴&#xff0c;有效。 3.如果都为value.,则按数值…

实验四:基于System-Verilog的FPGA设计与仿真

实验四&#xff1a;基于System-Verilog的FPGA设计与仿真 实验目的&#xff1a; 学习和掌握System Verilog基本语法&#xff0c;在DE2-115开发板上重新设计之前做过的Verilog练习&#xff0c;如流水灯、全加器或者VGA显示、超声波测距 等&#xff0c;并完成 testbench 仿真。 …

定时开放防火墙端口,并自动关闭

限时开放端口脚本 manage_port.sh 使用说明 简介 manage_port.sh 是一个用于在 Linux 系统上临时开放并随后关闭指定端口的脚本。该脚本接受端口号和时间&#xff08;以分钟为单位&#xff09;作为参数&#xff0c;并根据系统自动检测使用 ufw 或 firewalld 防火墙来管理端口…

【贪心算法·哈夫曼编码问题】从定长编码和不定长编码讲到最小化带权路径长度和

一、问题介绍 1.1&#xff1a;编码问题 首先&#xff0c;我们知道&#xff0c;数字字符等任何数据的底层&#xff0c;都是以二进制&#xff08;0,1序列&#xff09;的方式存储在计算机内的。 对于“编码”其实就是那些能显示在计算机屏幕上的&#xff1a;不同字母、汉字、字…

半导体光子电学期末笔记2: 光子晶体 Photonic crystals

光子晶体概述 光子晶体定义和分类 [P4-5] 光子晶体是一种在一维、二维或三维空间内周期性排列的多层介质。这些结构通过在光子尺度上排列的重复单元&#xff0c;可以对光进行调控和控制。具体来说&#xff0c;光子晶体是指那些在空间上具有周期性排列的介质结构&#xff0c;它…

C++中的‘位’操作

目录 摘要 基本位操作 1. 按位与&#xff08;AND&#xff09;&&#xff1a; 2. 按位或&#xff08;OR&#xff09;|&#xff1a; 3. 按位异或&#xff08;XOR&#xff09;^&#xff1a; 4. 按位取反&#xff08;NOT&#xff09;~&#xff1a; 5. 左移&#xff08;Le…

JavaWeb学习:Vue+Element-plus实现文件上传

需求&#xff1a; JavaWeb的购物车系统需要实现新增商品的功能。商品的展示图片需要与商品的基础信息一同上传至服务器&#xff0c;图片保存路径则随基础信息异同保存至数据库。 实现&#xff1a; 前端&#xff1a; 1. 选择相应的文件上传组件&#xff1a; 选择点击按钮手…

【深度学习】温故而知新4-手写体识别-多层感知机+CNN网络-完整代码-可运行

多层感知机版本 import torch import torch.nn as nn import numpy as np import torch.utils from torch.utils.data import DataLoader, Dataset import torchvision from torchvision import transforms import matplotlib.pyplot as plt import matplotlib import os # 前…

wvp-gb28181-pro搭建流媒体服务器,内存占用过高问题

直接给出解决办法&#xff0c;端口暴露的太多了&#xff0c;暴露了500个端口导致从3g---->11g 遇到的问题&#xff0c;直接使用镜像《648540858/wvp_pro:latest》在宿主机上运行,如我下面的博客 https://blog.csdn.net/weixin_41012767/article/details/137112338?spm100…

FASTGPT:可视化开发、运营和使用的AI原生应用

近年来&#xff0c;随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;AI的应用逐渐渗透到各行各业。作为一种全新的开发模式&#xff0c;AI原生应用正逐步成为行业的焦点。在这方面&#xff0c;FASTGPT无疑是一款颇具代表性的产品。本文将详细介绍FASTGPT的设…

面向对象编程高级概念详解

面向对象编程&#xff08;Object-Oriented Programming, OOP&#xff09;不仅是一种编程范式&#xff0c;更是一种思考和设计软件的方法。本文将深入探讨OOP中的几个核心概念&#xff0c;包括析构函数、深浅拷贝、静态成员、单例模式、操作符重载、友元以及前与后的区别&#x…