C++小结(一)
来源:互联网 发布:销售开单软件 编辑:程序博客网 时间:2024/06/14 05:39
#include <iostream>using namespace std;// main() 是程序开始执行的地方int main(){ cout << "Hello World"; // 输出 Hello World return 0;}
接下来我们讲解一下上面这段程序:
C++ 语言定义了一些头文件,这些头文件包含了程序中必需的或有用的信息。上面这段程序中,包含了头文件 <iostream>。行 using namespace std; 告诉编译器使用 std 命名空间。命名空间是 C++ 中一个相对新的概念。下一行 // main() 是程序开始执行的地方 是一个单行注释。单行注释以 // 开头,在行末结束。下一行 int main() 是主函数,程序从这里开始执行。下一行 cout << "Hello World"; 会在屏幕上显示消息 "Hello World"。下一行 return 0; 终止 main( )函数,并向调用进程返回值 0。
基本的内置类型
C++ 为程序员提供了种类丰富的内置数据类型和用户自定义的数据类型。下表列出了七种基本的 C++ 数据类型:
类型 关键字
布尔型 bool
字符型 char
整型 int
浮点型 float
双浮点型 double
无类型 void
宽字符型 wchar_t
一些基本类型可以使用一个或多个类型修饰符进行修饰:
signedunsignedshortlong
下表显示了各种变量类型在内存中存储值时需要占用的内存,以及该类型的变量所能存储的最大值和最小值。
类型 位 范围
char 1 个字节 -128 到 127 或者 0 到 255unsigned char 1 个字节 0 到 255signed char 1 个字节 -128 到 127int 4 个字节 -2147483648 到 2147483647unsigned int 4 个字节 0 到 4294967295signed int 4 个字节 -2147483648 到 2147483647short int 2 个字节 -32768 到 32767unsigned short int 2 个字节 0 到 65,535signed short int 2 个字节 -32768 到 32767long int 8 个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807signed long int 8 个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807unsigned long int 8 个字节 0 to 18,446,744,073,709,551,615float 4 个字节 +/- 3.4e +/- 38 (~7 个数字)double 8 个字节 +/- 1.7e +/- 308 (~15 个数字)long double 8 个字节 +/- 1.7e +/- 308 (~15 个数字)wchar_t 2 或 4 个字节 1 个宽字符
枚举类型
例如,下面的代码定义了一个颜色枚举,变量 c 的类型为 color。最后,c 被赋值为 “blue”。
enum color { red, green, blue } c;
c = blue;
默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。但是,您也可以给名称赋予一个特殊的值,只需要添加一个初始值即可。例如,在下面的枚举中,green 的值为 5。
enum color { red, green=5, blue };
在这里,blue 的值为 6,因为默认情况下,每个名称都会比它前面一个名称大 1。
变量
bool 存储值 true 或 false。char 通常是一个八位字节(一个字节)。这是一个整数类型。int 对机器而言,整数的最自然的大小。float 单精度浮点值。double 双精度浮点值。void 表示类型的缺失。wchar_t 宽字符类型。
extern int d = 3, f = 5; // d 和 f 的声明 int d = 3, f = 5; // 定义并初始化 d 和 fbyte z = 22; // 定义并初始化 zchar x = 'x'; // 变量 x 的值为 'x'
using namespace std;
所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。
它是C++新标准中有的,解决多人作编大程序时名字冲突问题。比如A B两个班都有叫张三的人,你要使用A班的张三,必然要先指名是A班这个名字空间(namespace),然后你对张三的所有命令才能达到你的预想,不会叫错人 如果你用#include<iostream.h>就不需写这句话(旧标准)。但是如果你用#include<iostream>就必须要写。
常量
在 C++ 中,有两种简单的定义常量的方式:
使用 #define 预处理器。使用 const 关键字。
#define LENGTH 10 #define WIDTH 5const int LENGTH = 10; const int WIDTH = 5;
修饰符类型
signedunsignedlongshort
修饰符 signed、unsigned、long 和 short 可应用于整型,signed 和 unsigned 可应用于字符型,long 可应用于双精度型。
修饰符 signed 和 unsigned 也可以作为 long 或 short 修饰符的前缀。例如:unsigned long int。
C++ 允许使用速记符号来声明无符号短整数或无符号长整数。您可以不写 int,只写单词 unsigned、short 或 unsigned、long,int 是隐含的。例如,下面的两个语句都声明了无符号整型变量。
unsigned x;unsigned int y;
C++ 中的类型限定符
类型限定符提供了变量的额外信息。
限定符 含义
const const 类型的对象在程序执行期间不能被修改改变。
volatile 修饰符 volatile 告诉编译器,变量的值可能以程序未明确指定的方式被改变。
restrict 由 restrict 修饰的指针是唯一一种访问它所指向的对象的方式。只有 C99 增加了新的类型限定符 restrict。
循环
while 循环
#include <iostream>using namespace std;int main (){ // 局部变量声明 int a = 10; // while 循环执行 while( a < 20 ) { cout << "a 的值:" << a << endl; a++; } return 0;}
for 循环
#include <iostream>using namespace std;int main (){ // for 循环执行 for( int a = 10; a < 20; a = a + 1 ) { cout << "a 的值:" << a << endl; } return 0;}
do 循环
#include <iostream>using namespace std;int main (){ // 局部变量声明 int a = 10; // do 循环执行 do { cout << "a 的值:" << a << endl; a = a + 1; }while( a < 20 ); return 0;}
if…else 语句
#include <iostream>using namespace std;int main (){ // 局部变量声明 int a = 100; // 检查布尔条件 if( a < 20 ) { // 如果条件为真,则输出下面的语句 cout << "a 小于 20" << endl; } else { // 如果条件为假,则输出下面的语句 cout << "a 大于 20" << endl; } cout << "a 的值是 " << a << endl; return 0;}
switch
switch(expression){ case constant-expression : statement(s); break; // 可选的 case constant-expression : statement(s); break; // 可选的 // 您可以有任意数量的 case 语句 default : // 可选的 statement(s);}
嵌套 switch 语句
#include <iostream>using namespace std;int main (){ // 局部变量声明 int a = 100; int b = 200; switch(a) { case 100: cout << "这是外部 switch 的一部分" << endl; switch(b) { case 200: cout << "这是内部 switch 的一部分" << endl; } } cout << "a 的准确值是 " << a << endl; cout << "b 的准确值是 " << b << endl; return 0;}
C++ 数学运算
为了利用这些函数,您需要引用数学头文件 <cmath>。序号 函数 & 描述1 double cos(double);该函数返回弧度角(double 型)的余弦。2 double sin(double);该函数返回弧度角(double 型)的正弦。3 double tan(double);该函数返回弧度角(double 型)的正切。4 double log(double);该函数返回参数的自然对数。5 double pow(double, double);假设第一个参数为 x,第二个参数为 y,则该函数返回 x 的 y 次方。6 double hypot(double, double);该函数返回两个参数的平方总和的平方根,也就是说,参数为一个直角三角形的两个直角边,函数会返回斜边的长度。7 double sqrt(double);该函数返回参数的平方根。8 int abs(int);该函数返回整数的绝对值。9 double fabs(double);该函数返回任意一个十进制数的绝对值。10 double floor(double);该函数返回一个小于或等于传入参数的最大整数。
C++ 引用 vs 指针
C++ 引用
引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。
C++ 引用 vs 指针
引用很容易与指针混淆,它们之间有三个主要的不同:
不存在空引用。引用必须连接到一块合法的内存。一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。引用必须在创建时被初始化。指针可以在任何时间被初始化。
C++ 中创建引用
试想变量名称是变量附属在内存位置中的标签,您可以把引用当成是变量附属在内存位置中的第二个标签。因此,您可以通过原始变量名称或引用来访问变量的内容。例如:
int i = 17;
我们可以为 i 声明引用变量,如下所示:
int& r = i;
在这些声明中,& 读作引用。因此,第一个声明可以读作 “r 是一个初始化为 i 的整型引用”,第二个声明可以读作 “s 是一个初始化为 d 的 double 型引用”。下面的实例使用了 int 和 double 引用:
#include <iostream>using namespace std;int main (){ // 声明简单的变量 int i; double d; // 声明引用变量 int& r = i; double& s = d; i = 5; cout << "Value of i : " << i << endl; cout << "Value of i reference : " << r << endl; d = 11.7; cout << "Value of d : " << d << endl; cout << "Value of d reference : " << s << endl; return 0;}
当上面的代码被编译和执行时,它会产生下列结果:
Value of i : 5
Value of i reference : 5
Value of d : 11.7
Value of d reference : 11.7
C++ 把引用作为参数
#include <iostream>using namespace std;// 函数声明void swap(int& x, int& y);int main (){ // 局部变量声明 int a = 100; int b = 200; cout << "交换前,a 的值:" << a << endl; cout << "交换前,b 的值:" << b << endl; /* 调用函数来交换值 */ swap(a, b); cout << "交换后,a 的值:" << a << endl; cout << "交换后,b 的值:" << b << endl; return 0;}// 函数定义void swap(int& x, int& y){ int temp; temp = x; /* 保存地址 x 的值 */ x = y; /* 把 y 赋值给 x */ y = temp; /* 把 x 赋值给 y */ return;}
当上面的代码被编译和执行时,它会产生下列结果:
交换前,a 的值: 100
交换前,b 的值: 200
交换后,a 的值: 200
交换后,b 的值: 100
C++ 把引用作为返回值
#include <iostream>using namespace std;double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};double& setValues( int i ){ return vals[i]; // 返回第 i 个元素的引用}// 要调用上面定义函数的主函数int main (){ cout << "改变前的值" << endl; for ( int i = 0; i < 5; i++ ) { cout << "vals[" << i << "] = "; cout << vals[i] << endl; } setValues(1) = 20.23; // 改变第 2 个元素 setValues(3) = 70.8; // 改变第 4 个元素 cout << "改变后的值" << endl; for ( int i = 0; i < 5; i++ ) { cout << "vals[" << i << "] = "; cout << vals[i] << endl; } return 0;}
当上面的代码被编译和执行时,它会产生下列结果:
改变前的值
vals[0] = 10.1
vals[1] = 12.6
vals[2] = 33.1
vals[3] = 24.1
vals[4] = 50
改变后的值
vals[0] = 10.1
vals[1] = 20.23
vals[2] = 33.1
vals[3] = 70.8
vals[4] = 50
当返回一个引用时,要注意被引用的对象不能超出作用域。所以返回一个对局部变量的引用是不合法的,但是,可以返回一个对静态变量的引用。
- C语言小结(一)
- C语言小结(一)
- c++bug小结(一)
- 小结 | 初识C++(一)
- C#+ArcEngine问题小结(一)
- C语言基础小结(一)
- C语言知识小结(一)
- 高质量C,C++编程指南 知识点小结(一)
- oracle 小结(一)
- VB 小结(一)
- 小结(一)
- 多线程小结(一)
- 操作系统小结(一)
- 面试小结(一)
- linux小结(一)
- 【软件工程】小结(一)
- service小结(一)
- SQL小结(一)
- 《情感机器》-读书笔记(2)
- NYOJ--86--set.find()--找球号(一)
- 简单的css动画下拉菜单
- SDNU 1061.采药3 二维费用背包
- Android自定义View实现手写签名的功能
- C++小结(一)
- 动态规划在概率论中的应用:产生N种不同结果的概率之间的联系
- 计算缓存
- 实用文章列表
- jQuery对象与DOM对象的相互转换
- RHEL-RH134-UNI2-控制对文件的访问
- Volley框架小总结
- 题目:将二维数组arr中的第一列与最后一列的元素对调 用指针实现
- 基于docker的应用服务部署