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 个字节   -128127 或者 0255unsigned char   1 个字节   0255signed char 1 个字节   -128127int 4 个字节   -21474836482147483647unsigned int    4 个字节   04294967295signed int  4 个字节   -21474836482147483647short int   2 个字节   -3276832767unsigned short int  2 个字节   065,535signed short int    2 个字节   -3276832767long int    8 个字节   -9,223,372,036,854,775,8089,223,372,036,854,775,807signed long int 8 个字节   -9,223,372,036,854,775,8089,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 24 个字节   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    存储值 truefalsechar    通常是一个八位字节(一个字节)。这是一个整数类型。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

当返回一个引用时,要注意被引用的对象不能超出作用域。所以返回一个对局部变量的引用是不合法的,但是,可以返回一个对静态变量的引用。

1 0
原创粉丝点击