《C++primer plus》学习笔记——第二章

2024-06-08 08:08

本文主要是介绍《C++primer plus》学习笔记——第二章,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、进入C++
    • 1.main()函数的标准
    • 2.cin和cout进行输入和输出的程序必须包含文件iostream
    • 3.头文件名字
    • 4.名称空间
    • 5.使用cout进行C++输出
    • 6.C++源代码的格式化
  • 二,C++语句
    • 1)对于变量声明
    • 2)赋值语句
    • 3)其它C++语句
    • 4)类简介
    • 5)函数
      • A.有返回值的函数
      • B. 函数变体
      • C.用户定义的函数
        • **函数格式**
        • **函数头**
      • D.用户定义的有返回值的函数
      • E.在多函数程序中使用using编译命令
  • 总结

第二章:开始学习C++

一、进入C++

1.main()函数的标准

int main()
{return 0;
}

2.cin和cout进行输入和输出的程序必须包含文件iostream

3.头文件名字

在这里插入图片描述

4.名称空间

如果不用using

Microflop::wanda(".....");Piscine::wanda("....");

上者将其定义放到一个名为Microflop的名称空间,全称如上述所示;
下者的全称如下所示;

iostream中定义的用于输出的cout变量实际上是std::cout,endl实际上是std::endl;

using  namespace std;
表明可以使用std名称空间中定义的名称,而不必使用std::前缀,对于简单程序而言,采用何种名称管理方法无关紧要;上述是一种偷懒的做法,更好的办法是,是使用所需的名称即可;
using std::out;
using std::endl;
using std::cin;

5.使用cout进行C++输出

cout<<".."
双括号括起来的是要打印的消息,在C++中,用双括号括起来的一系列字符叫做**字符串**

在这里插入图片描述

1)控制符endl

表示:重启一行,endl也是在头文件iostream中定义的,位于名称空间std中;

2)换行符

在这里插入图片描述

区别就是:endl能够保证立即显示在屏幕上,而“\n”不能提供这样的保证。

6.C++源代码的格式化

二,C++语句

要将信息项数据存储在计算机中,必须指出信息的存储位置和所需的内存空间。

1)对于变量声明

声明通常指出了要存储的数据类型和程序对存储在这里的数据使用的名称;
C++的做法是尽可能在首次使用变量前声明它;

2)赋值语句

可以连续使用赋值运算符
在这里插入图片描述

cout的智能行为源自C++的面向对象特性。实际上,C++插入运算符(<<)将根据其后的数据类型相应地调整其行为,这是一个运算符重载的例子。
eg:

int number=25;
cout<<number

程序没有打印number,而是打印存储在number中的整数值,即25。实际上,将这两个操作合二为一了,首先,cout将number替换为当前值25,然后,把值转换为合适的输出字符。
在这里插入图片描述

3)其它C++语句

可以将一条语句放在4行上:

eg:把Now you have 14 carrots.用下面的来表示

cout<<"Now you have ";
cout<<carrots;
cout<<"carrots";
cout<<endl;

4)类简介

定义描述的是数据格式及其用法,而对象则是根据数据格式规范创建的实体。

C++类对应于某些语言中的对象类型,而C++对象对应于对象实例或实例变量

函数可以来自函数库,类也可以来自类库。类描述指定了可对类对象执行的所有操作,要对特定对象执行这些允许的操作,需要给该对象发送一条消息。eg:cout对象显示一个字符串,则应向它发送一条消息,告诉他:“对象,显示这些内容!”。
C++提供了两种发送消息的方式:1)使用类方法(函数调用);2)重新定义运算发,eg:cin,cout,

cout<<"…", 就是重新定义<<运算

在这里插入图片描述

5)函数

C++函数分为:有返回值的和无返回值的

A.有返回值的函数

首先是调用过程,如下所示:
在这里插入图片描述

在这里插入图片描述

在使用函数之前,C++编译器必须知道函数的参数类型和返回值类型。C++提供这些信息的方式是使用函数原型语句。

C++程序会为程序中的每个函数提供原型。函数原型之于函数就像变量声明之于变量,需要指出涉及的类型。

eg:
sqart()的描述应该和下面代码中使用的函数相同:

double x;
x=sqrt(6.25)

sqrt()的函数原型像这样:

double sqart(double);

第一个double意味着sqrt()将返回一个double值,括号中的double意味着sqrt()需要一个double参数。原型结尾的分号表明它是一条语句,这使得它是一个原型,而不是函数头(若是函数头,则需要紧接着提供该函数的函数体)。

能够提供原型的两种方法:
1)在源代码文件中输入函数原型
2)包含头文件cmath(or math.h),其中定义了原型(更好,why?对于C++库函数中的每个函数,都在一个或多个头文件中提供了其原型)

函数原型只描述了函数接口,不要混淆函数原型和函数定义。库文件中包含了函数的编译代码,而头文件中则包含了原型。

eg:

在这里插入图片描述

C++允许在程序的任何地方申明新变量,C++还允许在创建变量时,就对她进行赋值,,这称之为初始化,eg:

double side=sqrt(area);

B. 函数变体

在cstlib or stdlib.h头文件相关的库中,包含一个rand()函数,该函数不接受任何参数,并返回一个随机整数,该函数的原型如下:

int rand(boid);

关键字void表明:该函数不接受任何参数。若省略void,则C++将其解释为一个不接受任何参数的隐式申明。eg:my=rand();

C.用户定义的函数

在这里插入图片描述

// ourfunc.cpp -- defining your own function
#include <iostream>
void simon(int);    // function prototype for simon()int main()
{using namespace std;simon(3);       // call the simon() functioncout << "Pick an integer: ";int count;cin >> count;simon(count);   // call it againcout << "Done!" << endl;// cin.get();// cin.get();return 0;
}void simon(int n)   // define the simon() function
{using namespace std;cout << "Simon says touch your toes " << n << " times." << endl;
}                   // void functions don't need return statements

对上面这个函数eg的一些说明

函数格式

有一个函数头,然后是花括号中的函数体

在这里插入代码片在这里插入图片描述

函数头
void simon(int n)

void表明simon()没有返回值,因此调用simon()不会生成可在main()中将其赋给变量的数字。由于simon()没有返回值,因此像如下的调用它:

simp=simon(3);

在这里插入图片描述

这个时候再看看main()函数头,就知道为啥 要return 0;

在这里插入图片描述

这个0返回给操作系统了。

D.用户定义的有返回值的函数

直接看例子:

// convert.cpp -- converts stone to pounds
#include <iostream>
int stonetolb(int);     // function prototype
int main()
{using namespace std;int stone;cout << "Enter the weight in stone: ";cin >> stone;int pounds = stonetolb(stone);cout << stone << " stone = ";cout << pounds << " pounds." << endl;// cin.get();// cin.get();return 0;
}int stonetolb(int sts)
{return 14 * sts;
}

在这里插入图片描述

该例子表明:函数原型描述了函数接口,即函数如何与程序的其它部分交互。参数列表指出了何种信息将被传递给函数,函数类型指出了返回值的类型。

在这里插入图片描述

E.在多函数程序中使用using编译命令

在这里插入图片描述

**

总结

**

在这里插入图片描述

在这里插入图片描述

这篇关于《C++primer plus》学习笔记——第二章的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1041621

相关文章

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

mybatis-plus如何根据任意字段saveOrUpdateBatch

《mybatis-plus如何根据任意字段saveOrUpdateBatch》MyBatisPlussaveOrUpdateBatch默认按主键判断操作类型,若需按其他唯一字段(如agentId、pe... 目录使用场景方法源码方法改造首先在service层定义接口service层接口实现总结使用场景my

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基

MyBatis-Plus 与 Spring Boot 集成原理实战示例

《MyBatis-Plus与SpringBoot集成原理实战示例》MyBatis-Plus通过自动配置与核心组件集成SpringBoot实现零配置,提供分页、逻辑删除等插件化功能,增强MyBa... 目录 一、MyBATis-Plus 简介 二、集成方式(Spring Boot)1. 引入依赖 三、核心机制