C++程序设计学习笔记(一)

目录

1.C++语言简介

1.C++语言发展简史 

1.机器语言

2.汇编语言

3.高级语言

4.C++语言发展简史

5.C++和C语言的关系

2.C++语言的特点

1.基本的输入输出

1.C++中的输入流和输出流

2.标准的hellworld代码

3.简单的输输出函数

2.头文件和命名空间

1.头文件

2.命名空间        

3.强制类型转换运算符

1. static_cast   

2.const_cast

4.函数参数的默认值

5.引用和函数参数的传递

1.引用

2.引用在函数中的使用        

6.const与指针共同使用

7.内联函数

8.函数的重载

9.指针和动态内存分配

1.指针

2.动态内存分配

10.用string对象处理字符串

 1.声明string对象

2.string对象的操作

1.输入输出

2.string对象之间互相赋值

3.使用运算符操作

4.使用+进行字符串拼接       

5.string对象用法实例

1.empty()函数判断字符窜是否为空

2.size()函数判断字符的大小

3.length()函数判断字符窜长度

4.find()函数

5.insert()函数

6.append()函数

3.C++语言的程序结构


工作之后,没怎么写过C++了,空闲下来的时候,翻了下C++的书籍,记录下学习C++的过程。

1.C++语言简介

1.C++语言发展简史 

        按照是否可以直接操纵计算机底层硬件,把程序设计语言分成低级语言、中级语言、高级语言。机器语言和汇编语言属于低级语言,因为它们可以直接操纵计算机的寄存器和内存。计算机诞生的初期,使用低级语言编程是主要的开发形式。

1.机器语言

        机器语言是一种依赖于CPU的指令系统,使用机器指令的二进制代码编写程序,能够直接被计算机识别。

2.汇编语言

          汇编语言使用能够代表指令的助记符来编写程序,也可以看作是符号化了的机器语言。

3.高级语言

           高级语言是面向用户的语言,在形式上接近于算数语言和自然语言。优点是程序容易阅读并且通用性强,但是不能直接和硬件打交道,可不能直接在计算机上运行,需要系统软件的支持,需要编译程序以及链接程序将高级语言编译链接称为及其指令之后才能运行。

        C++属于高级语言范畴。

4.C++语言发展简史

  1. 1979年C++诞生于贝尔实验室。
  2. 1985年C++1.0版诞生。
  3. 1989年C++2.0版诞生。
  4. 1993年C++3.0版诞生。
  5. 1998年C++98(C++标准第一版)诞生。
  6. 2003年C++03(C++标准第二版)版诞生。
  7. 2011年C++11(C++标准第三版)版诞生。
  8. 2014年C++14(C++标准第四版)版诞生
  9. 2017年C++17(C++标准第五版)版诞生。

5.C++和C语言的关系

        C语言是C++的前身,在进一步扩充和完善C语言的基础上得到了C++语言。C++是C语言的超集。

2.C++语言的特点

        C++语言的主要特点如下:

  1. C++是C语言的继承,尽量兼容C语言,既保持了C语言的简洁和高效,可以像C语言那样进行结构化程序设计,同时也增强了C语言对类型的处理。
  2. C++加入了面向对象特征,可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行一继承和多态为特点的面向对象的程序设计。

1.基本的输入输出

1.C++中的输入流和输出流

        C++中,类库中提供了输入流instream和输出流ostream。cin和cout分别是instream类和ostream类的对象,用来实现基本的键盘输入和屏幕输出。

        从输入流中获取数据的操作称为提取操作,向输出流中添加数据的操作称为插入操作。运算符">>"和"<<"是位移运算符,在C++类库中已经对"<<"和">>"进行了重载,使之分别作为流提取运算符和流插入运算符,用来输入和输出C++标准类型的数据。

       在使用cin和cout函数的时候,必须导入<iostream>.

        C++中,当连续从键盘读取想要的数据时,以空格<Space>,制表符<Tab>,或者<Enter>键作为分隔符。

        cin的一本格式如下:

        cin>>变量1>>变量2>>..>>变量n;

        cout的一本格式如下:

        cout<<变量1<<变量2<<..<<变量n;

    cout的一本格式如下:

2.标准的hellworld代码
#include <iostream>int main(int argc, const char * argv[]) {// insert code here...std::cout << "Hello, World!\n";return 0;
}
3.简单的输输出函数

cout的一本格式如下:

#include <iostream>int main(int argc, const char * argv[]) {// insert code here...std::cout <<"请输入两个整数\n";int numbber1, number2;std::cin>>numbber1>>number2;std::cout <<"number1:"<<numbber1<<"\tnumnber2:"<<number2<<"\n";return 0;
}

2.头文件和命名空间

1.头文件

       C++中使用#include指令表示导入类库或者头文件。

        其中#include<文件名>表示导入系统提供的类库,#include "文件名"表示导入用户自定义的类文件。 当我们使用尖括号的时候,C++编译器首先寻找C++设置的目录中寻找头文件,如果找不到,才会在制定的目录中寻找。

        常用的头文件有以下几个:

  1. 标准输入输出流:<iostream>
  2. 标准文件流:<fstream>
  3. 标准字符串处理函数:<string> 
  4. 标准数学函数:<cmath>   
2.命名空间        

        C++使用namespace表示命名空间。

          标准的namespace格式如下:

namespace 命名空间名

{

        命名空间内的各种声明(函数声明、类声明、...)

}        

        C++中namespace的引入是为了解决不同模块中出现的标识符重名的问题,在大型的程序中,各个模块通常是不同的程序员开发的,不同模块中可能会出现重名的问题,namespace的引用就解决了这个问题。

        引用命名空间的标识符的语法格式如下:

命名空间名::标识符;

using namespace 命名空间名;

        第一种方式表示在本文件中直接使用该标识符

        第二种方式表示可以再本文件中直接使用指定命名空间内的所有标识符。

        以上面的helloworld程序为例,当我们使用using namespace ::std定义标识符的时候,std::cout<<"Hello world!"可以写成"cout<<"Hello world".

#include <iostream>
using namespace::std;int main(int argc, const char * argv[]) {// insert code here...cout <<"Hello world!\n";return 0;
}

3.强制类型转换运算符

       当不同类型的量进行混合运算时,系统自动进行合理的类型转换,也可以在程序中使用强制类型转换符static_cast或者是const_cast进行转换。

1. static_cast   

        static_cast表示将一种数据类型转换成另外一种数据类型,使用格式如下:

static_cast<类型名>(表达式)

        其中static_cast可以省略,下面的四种写法都是正确的

oneInt2 = static_cast<Int>(oneDouble)

oneInt2 = Int(oneDouble)

oneInt2 = (Int)oneDouble

oneInt2 = oneDouble

2.const_cast

        用于去除指针和引用的常量性,但不能去除变量的常量性。

        标准格式如下:

const_cast<类型名>(表达式)

        这个运算符的作用就是讲常量指针转换为非常量的指针,并且仍然指向原来的对象;或者将常量引用转换成为非常量的引用,并且仍然指向原来的对象。

4.函数参数的默认值

         C++中,可以再声明函数时为形参指定默认值。当调用默参数值的函数时,调用语句中可以不给出对应的实参,这就相当于调用该函数时以默认值作为参数。指定默认值时不仅可以用常数,还可以用任何有定义的表达式作为参数的默认值。

#include <iostream>
using namespace::std;void func(int a = 11,int b = 22,int c = 33){cout<<"a="<<a<<",b="<<b<<",c="<<c<<endl;
}int main(int argc, const char * argv[]) {func();func(55);func(77,99);func(8,88,888);return 0;
}

        上述的代码中,我们调用func()的时候,打印出来的结果是11,22,33

        调用func(55)的时候,打印出来的结果是55,22,33。

        调用func(77,99)的时候,打印出来的结果是77,99,33。

        调用func(8,88,888)的时候,打印出来的结果是8,88,888。

5.引用和函数参数的传递

1.引用

        引用相当于给变量起了一个别名,格式如下:

  类型名 & 引用名 = 同类型的某变量

        如果给变量起了一个别名,相当于变量和这个引用都对应到同一地址。

int oneInt;

int &aname = oneInt;

2.引用在函数中的使用        

        函数在传值的时候既可以直接传值,也可以传指针。

6.const与指针共同使用

        const限制访问权限,告诉编译器,它所修饰的量是不能改变的。

        const修饰变量的时候,基本含义如下:

1.如果唯一的const位于符号*的左侧,表示指针所指数据是常量,数据不能通过本指针修改,但是可以通过其他方式进行修改;指针本身是变量,可以指向其他的内存单元。

2.如果唯一的const位于符号*的右侧,表示指针本身是常量,不能让该指针指向其他内存地址;指针所指的数据可以通过本指针修改。

3.如果符号*的左右两侧各有一个const的时候,表示指针和指针所指数据都是常量,既不能让该指针指向其他地址,也不能通过指针修改所指的数据。

7.内联函数

        C++中内联函数的使用是为了减少程序代码,实现程序代码的共享,从而提高程序的开发效率和可维护性。

        内联函数的标准格式:

inline 返回值类型 函数名(函数参数)
{

        函数体

}

8.函数的重载

C++允许同名的重载函数。

#include <iostream>
#include <string>
using namespace::std;int max(int x,int y){if (x>=y) {return x;} else {return y;}
}
float max(float x,float y){if (x>=y) {return x;} else {return y;}
}
double max(double x,double y){if (x>=y) {return x;} else {return y;}
}int main(int argc, const char * argv[]) {string str = "C++";str = str.append("程序设计");cout<<str<<endl;cout<<max(1, 3)<<endl;cout<<max(1.1, 3.0)<<endl;cout<<max(111.123123123123, 3.123123123123)<<endl;return 0;
}

9.指针和动态内存分配

1.指针

       指针变量中保存的事一个地址,有时候指针指向一个地址。

2.动态内存分配

        C++中不允许定义元素个数不确定的数组。但是提供了动态内存分配机制,在程序运行期间,根据实际需要,临时分配一段内存空间用于存储数据。因为这种内存分配实在程序运行期间进行的,所以称作”动态内存分配“。

10.用string对象处理字符串

        C++标准类库中提供了一个string数据类型,专门用于处理字符串。可以把string看成一个特殊的数据类型,专门用来处理字符串。

        使用string对象的时候,必须在程序中包含头文件string,即在程序的最前面,要加入下面的语句:

#include <string>

 1.声明string对象

        格式如下:

String 变量名;

在声明字符串的同时,可以进行初始化,没有进行初始化的字符串即""。

string str1;

string city = "BeiJing";

string str2= city;

cout<<"str1="<<str1<<"."<<endl;

cout<<city<<","<<str2<<endl;

也可以使用字符串数据对字符串变量进行初始化。例如:

char name[] = "C++程序设计";

string s1 = name;

还可以声明一个string对象数组,即数组中每个元素都是字符串。例如:

string citys[] = {"Beijing","Shanghai","Tianjin","Chongqing"};

cout<<citys[1]<<endl;

cout<<sizeof(citys)/sizeof(string)<<endl;

        sizeof(citys)表示整个数组占用的空间大小,sizeof(string)表示每个string对象的大小,所以sizeof(citys)/sizeof(string)表示的是数组元素个数。

2.string对象的操作
1.输入输出

例如:

string s1,s2;

cin>>s1>>s2;

cout<<s1<<","<<s2<<endl;

2.string对象之间互相赋值

string s1,s2="OK";

s1 = "China";

s2 = s1;

cout<<"s1="<<s1<<"\ts2="<<s2<<endl;

3.使用运算符操作

        这里指的是对象之间使用"<"、"<="、"=="、">"、">="、"<"运算符进行比较。大小的判定是按照字典的顺序进行的,而且是大小写相关的。例如,大写字母的ASCII码小于小写字母的ASCII码('A'~'Z'码是0x41~0x5a,'a'~'z'码是0x61~0x7a,‘’)    ,所以"Zbc"<"abc"。

4.使用+进行字符串拼接       

string s1,s2,;

s1 = "C++";

s2 = "程序设计";

s = s1 + s2;

5.string对象用法实例

        string类中为字符串对象提供了一些”成员函数“,可以用来方便地实现一些功能。这些成员函数调用方法就是"string对象名.成员函数名(参数)"。

        string类中一些常用的成员函数列表如下:

1.empty()函数判断字符窜是否为空
int main(int argc, const char * argv[]) {string str;if (str.empty()) {cout<<"字符串为空\n";} else {}return 0;
}
2.size()函数判断字符的大小
    string str = "C++程序设计";cout<<"str字符串的大小:"<<size(str)<<"\n";
3.length()函数判断字符窜长度

    string str = "C++程序设计";

    cout<<"str字符串的长度:"<<str.length()<<"\n";

4.find()函数

        判断字符串中第一次出现字符的位置,如果查到了,范围第一次出现的位置,如果没有查到,返回-1。

    string str = "C++程序设计";

    if (str.find("C++")!=-1) {

        cout<<"C++出现的位置:"<<str.find("C++")<<endl;

    } else {

        printf("查找失败");

    }     

        运行程序之后,控制台打印:C++出现的位置:0

5.insert()函数

        insert函数的作用是在制定的位置增加字符串。

#include <iostream>
#include <string>
using namespace::std;int main(int argc, const char * argv[]) {string str = "程序设计";str = str.insert(0,"c++");cout<<str<<endl;return 0;
}

运行程序之后,控制台输出内容:c++程序设计

6.append()函数

        append()函数的作用是在原来字符串的末尾追加新的字符串。

#include <iostream>
#include <string>
using namespace::std;int main(int argc, const char * argv[]) {string str = "C++";str = str.append("程序设计");cout<<str<<endl;return 0;
}

运行程序之后,控制打印:C++程序设计

3.C++语言的程序结构

        C++程序以.cpp作为文件拓展名,文件中包含若干个类和若干个函数。程序中必须有且仅有一个主函数main(),这是程序执行的主入口。主函数也成为主程序。程序从主函数的开始出执行,按照其控制结构,一直执行到结束。

        程序的结束通常是遇到了以下两种情况之一:

1.在主函数中遇到了return语句

2.执行到主函数最后面的}。

        主函数中可以调用程序中定义的其他函数,但其他函数不能调用主函数。主函数仅仅是系统为执行程序时所调用的。

        C++程序中,仍然沿用C语言的注释风格,即注释有以下两种形式。

1.从*/开始,到*/结束,这之间的所有内容都视作注释

2.从//直到行尾,都是注释。

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

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

相关文章

[Mac软件]Mac上的最佳3D建模工具-犀牛Rhinoceros 8 for Mac v8.4.24044.1500完美兼容激活

【黑果魏叔】Rhino 8是一款由美国Robert McNeel & Assoc开发的强大的专业3D造型软件&#xff0c;广泛应用于三维动画制作、工业制造、科学研究以及机械设计等领域。它可以轻松整合3DS MAX与Softimage的模型功能部分&#xff0c;对精细、弹性与复杂的3D NURBS模型具有高效的…

【RT-DETR有效改进】大核注意力 | LSKAttention助力极限涨点

一、本文介绍 在这篇文章中,我们将讲解如何将LSKAttention大核注意力机制应用于RT-DETR,以实现显著的性能提升。首先,我们介绍LSKAttention机制的基本原理,它主要通过将深度卷积层的2D卷积核分解为水平和垂直1D卷积核,减少了计算复杂性和内存占用。接着,我们介绍将这一…

布客深度学习译文集 2024.2 更新

Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版Sklearn 与 TensorFlow 机器学习实用指南第二版PyTorch 自然语言处理Transformer 和扩散模型的生成式 AI 实用指南&#xff08;预览版&#xff09;Transformer 自然语言处理面向程序员的 FastAI 和 PyTorch 深度学习Tensor…

MySQL篇—事务和隔离级别介绍

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

SG-8201CJA(汽车可编程晶体振荡器)

爱普生的SG-8021CJA是一款符合AEC-Q100标准的晶体振荡器&#xff0c;专为要求苛刻的汽车/ADAS应用&#xff08;如激光雷达和相机ECU&#xff09;而设计。它采用爱普生的内部低噪声小数NPLL&#xff0c;输出 频率高达170MHz&#xff0c;相位抖动小于1/25&#xff0c;稳定性比之前…

【前端素材】推荐实用的后台管理系统ebazer电商平台模板(附带源码)

一、需求分析 后台管理系统网站是指用于管理和控制网站、应用程序或系统后台运行的管理工具。它通常是网站或应用程序的管理者、管理员或内容编辑人员使用的界面&#xff0c;具有一系列功能来管理用户、内容、数据和系统设置。以下是后台管理系统网站的功能和特点&#xff1a;…

Mqtt qs 消息可靠性分析

什么是QoS 很多时候,使用MQTT协议的设备都运行在网络受限的环境下,而只依靠底层的TCP传输协议,并不能完全保证消息的可靠到达。因此,MQTT提供了QoS机制,其核心是设计了多种消息交互机制来提供不同的服务质量,来满足用户在各种场景下对消息可靠性的要求。 MQTT定义了三个Q…

Open Systems Interconnection(开放式系统互联)

OSI&#xff08;Open Systems Interconnection&#xff0c;开放式系统互联&#xff09;模型是一个描述计算机网络体系结构和通信系统的参考模型&#xff0c;它将计算机网络分成七个抽象的层级&#xff0c;每个层级负责不同的功能&#xff0c;从物理连接到最终的应用程序。以下是…

动态规划--买卖股票的最佳时机的6种变形

代码随想录中对6种变形做了详细的对比和分析&#xff0c;记录如下&#xff0c;模板是固定的。 121. 买卖股票的最佳时机 class Solution { public:int maxProfit(vector<int>& prices) {vector<vector<int>> dp(prices.size(), vector<int>(2,0)…

CapCut - 剪映国际版11.1.0

​【应用名称】&#xff1a;CapCut - 剪映国际版 【适用平台】&#xff1a;#Android 【软件标签】&#xff1a;#CapCut #剪映国际版 【应用版本】&#xff1a;11.1.0 【应用大小】&#xff1a;231MB 【软件说明】&#xff1a;软件升级更新。目前大家广泛使用的最令人惊叹、最专…

token的理解和代码,token是什么?

面试场景&#xff1a; 以前有个学生去面试&#xff0c;公司问他&#xff0c;如果你们公司的接口文档被你的亲戚看到了&#xff0c;会怎么样&#xff1f;会导致什么问题&#xff0c;为了防止这个问题&#xff0c;需要用什么来解决&#xff1f;这个根据学生回忆的写的。 学生当…

小程序--loading和toast

一、loading wx.showLoading({})显示loading提示框。wx.hideLoading({})隐藏loading提示框。 title&#xff1a;文字提示内容 mask&#xff1a;是否显示透明蒙层&#xff0c;防止触摸穿透。 更多属性参考showLoading官方文档。 wx.showLoading({title: 加载中...,mask: true }…

力扣面试150 验证回文串 双指针 Character API

Problem: 125. 验证回文串 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 参考题解 Character.isLetterorDigit(char c)&#xff1a;判读字符 c 是否是字母或者数字 Character.toLowerCase(char c)&#xff1a;将字符 c 转换为小写字母 复杂度 时间复杂度: …

docker (八)-dockerfile制作镜像

一 dockerfile dockerfile通常包含以下几个常用命令&#xff1a; FROM ubuntu:18.04 WORKDIR /app COPY . . RUN make . CMD python app.py EXPOSE 80 FROM 打包使用的基础镜像WORKDIR 相当于cd命令&#xff0c;进入工作目录COPY 将宿主机的文件复制到容器内RUN 打包时执…

十、计算机视觉-腐蚀操作

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、什么是腐蚀二、如何实现腐蚀三、腐蚀的原理 一、什么是腐蚀 在我们生活中常会见到腐蚀&#xff0c;比如金属表面受到氧化或其他化学物质的侵蚀&#xff0c;导致…

java----js常用的api

java----js常用的api 时间函数获取当前时间: DateUtil.today()时间偏移字符换时间格式化 map.computeIfAbsent添加list 时间函数 获取当前时间: DateUtil.today() String todayDateUtil.today()String today “2024-02-01”; 时间偏移 往前30天 DateTime parseDateUtil.o…

观察者模式和发布订阅模式的区别

从下图中可以看出&#xff0c;观察者模式中观察者和目标直接进行交互&#xff0c;而发布订阅模式中统一由调度中心进行处理&#xff0c;订阅者和发布者互不干扰。这样一方面实现了解耦&#xff0c;还有就是可以实现更细粒度的一些控制。比如发布者发布了很多消息&#xff0c;但…

Project_Euler-06 题解

Project_Euler-06 题解 题目描述 两个公式 等差数列求和公式 i i i项&#xff1a; a i a_{i} ai​ 项数&#xff1a; n n n 公差&#xff1a; d d d 和&#xff1a; S n S_{n} Sn​ a n a 1 ( n − 1 ) d S n n ( a 1 a n ) 2 a_{n} a_{1} (n - 1)d\\ S_{n} \frac{n(a_…

深究 DevOps 与平台工程的区别

今天&#xff0c;我们将讨论平台工程和 DevOps 的关系。尽管这两个概念有一些共同点&#xff0c;但它们仍然是截然不同的&#xff0c;我们将具体了解它们之间的区别。本文旨在解释当代软件工程中的这两个基本概念。通过实际案例&#xff0c;我们将分别说明这两个方法如何塑造了…

MySQL 的存储引擎(基本介绍)

文章目录 前言MySQL 的存储引擎介绍存储引擎是什么&#xff1f;存储引擎的特性? Innodb 与 Mylsam 的区别行级锁与表级锁是否支持事务是否支持恢复数据是否支持外键是否支持 MVCC 总结 前言 好文章不要错过&#xff0c;前两天跟大家分享的文章 1.MySQL的基础架构 2.SQL语句的…