C++程序设计第一章

第一章 认识C++的对象

**大家想一起学习交流的可以加群,QQ:755422568。**

一、初始C++

c++被称之为混合型语言

(1)、C++的函数和对象

C++将数据从一个对象流向另一个对象的流动抽象为流。

cin,标准输入,cout,标准输出

1)、从流中获取数据的操作称为提取操作。
当程序需要执行键盘输入时,使用提取操作符 “ >>”从cin输入流中提取字符 。

2)、向流中添加数据的操作称为插入操作。
当程序需要在屏幕上显示输出时,使用插入操作符 “ <<”向cout输出流中插入字符 。

3)、C++标准输入输出的头文件是iostream

#include <iostream’>

4)、命名空间是一种将程序库名称封装起来的方法,提高了程序的性能和可靠性。使用命名空间,让命名空间std内的名称曝光。

using namespace std;

5)、C++使用原则:必须要先声明,后使用。

6)、在C++中,使用const代替宏定义,用关键字const修饰的标识符是一类特殊的常量,称为符号常量/const变量。在程序中不可被改变。

const int BUFSIZE = 100;

7)、分析处理几种特殊的语句,被称为预处理语句。

预处理语句:宏定义、文件包含和条件编译。(选择题、填空题)

8)、书写程序语句,应注意如下规则:

括号紧跟在函数名的后面,但在for和while后面,应用一个空格与左空格以增加可队形。
数学运输付的左右后面留一个,以与表达式区别。
在表示参数时,逗号后面留一个空格。
在for、do…while和while语句中,合理使用缩进、一对花括号和空行。
太长的程序行应分为两行或者几行,并注意选取合适的分行和缩进位置。

(2)、C++语言的特点

c++语言的标准模板库(STL)

1)、函数重载

C++允许为同一个函数定义几个版本,从而使一个函数名具有多种功能。

#include <iostream>
using namespace std;
int max(int,int);		//声明2个参数的函数原型
int max(int,int,int);	//声明3个参数的函数原型
 
void main(){
	int x,y,z;
	cout << "请输入两个整数值(使用空格区分):" << endl;
	cin >> x >> y;
	int result = max(x,y);
	cout << x << "和" << y << "中最大的整数值为:" << result << endl;
 
	cout << "请输入三个整数值(使用空格区分):" << endl;
	cin >> x >> y >> z;
	int result1 = max(x,y,z);
	cout << x << "、" << y << "、" << z << "中最大的整数值为:" << result1 << endl;
}

int max(int a,int b){
	return (a>b)?a:b;
}

int max(int a,int b,int c){
	int t = max(a,b);
	return max(t,c);
}

/**
	 * 运行结果:
	 * 请输入两个整数值(使用空格区分):
	 * 35 25
	 * 35和25中最大的整数值为:35
	 * 请输入三个整数值(使用空格区分):
	 * 25 39 35
	 * 25、39、35中最大的整数值为:39
	 */

2)、新的基本数据类型和注意事项

① void是无类型标识符,只能用来声明函数的返回值类型,不能用来声明变量;

② C++标准限定int和short至少要有16位,而long至少32位,short不得长于int,int不得长于long,int使用4字节;

③ 地址运算符"&"用来获取对象存储的地址,存储地址用16进制表示,例如下:

//声明并定义一个对象,使用"&"来获取对象的存储地址并输出
void example1(){
	int x = 50;
	cout << &x;//打印结果:0x62ff1c
}

④ C++中的整数常量有四种类型:十进制常量、长整型常量、八进制常量和十六进制常量,并用前缀和后缀进行分类标识(选择题)

//整数常量示例
void example2(){
	//十进制常量	-32768	0	32767	+123	-456	987
	//长整型常量(后缀L或l)	123L	-457l	0L	1l
	//八进制常量(前缀0)	0123	05
	//十六进制常量(前缀0x)	0x10	0x1A
}

⑤ 可以用后缀表示浮点常量的类型,带F或f的是float类型;L或l表示它是long double类型;没有后缀则是double类型(选择题)

//浮点型常量示例
void example3(){
	//double型浮点常量		3.	123.4	0.002	52.4
	//float型浮点常量		3.2F	4.5f	0.002f
	//长浮点常量			0.2L	4.5l
 
}

3)、动态分配内存
在使用指针时,如果不使用对象地址初始化指针,可以自己给它分配地址。
对于一个存储基本类型数据的指针,申请如下:

//申请可以存储size个该数据类型的对象
new 类型名 [size]

不使用时,可以使用“delete指针名”释放空间(选择题、填空题)

void example4(){
	const int size = 3;
	int *i = new int[size];		//声明int型指针并分配3个int型数据的存储空间
	cout << "请输入3个整数(以空格区分):" << endl;
	for(int t=0;t<size;t++){	//循环将输入的数字存入指定的地址
		cin >> *(i+t);
	}
 
	for(int k=0;k<size;k++){	//循环将地址里的内容输出
		cout << *(i+k) << " ";
	}
 
	delete i;					//当不再使用这个空间时,释放空间
}

4)、引用
引用就是为现有的对象起一个别名,选定命名时使用“引用”运算符"&",它将一个新标识符与一块已经存在的存储区域相关联,引用并没有分配新的存储区域,它本身并不是新的数据类型。如下简单示例:

#include <iostream>
using namespace std;
void example5(){
	int x = 25;//定义并初始化变量x
	int &a = x;//声明a是x的引用,此时a和x的地址相同
	cout << "x的值是:" << x << ",变量x的内存地址是:" << &x << ",引用a的值是:" << a
	     << ",引用a的内存地址是:" << &a << endl;
	a = 30;//改变引用a的值,同时就改变了该内存地址中的值
	cout << "x的值是:" << x << ",变量x的内存地址是:" << &x << ",引用a的值是:" << a
	     << ",引用a的内存地址是:" << &a << endl;
	/**
	 * 打印结果:
	 * x的值是:25,变量x的内存地址是:0x62ff18,引用a的值是:25,引用a的内存地址是:0x62ff18
	 * x的值是:30,变量x的内存地址是:0x62ff18,引用a的值是:30,引用a的内存地址是:0x62ff18
	 */
} 

理解引用的两点:(重点理解)

① 引用实际上就是变量的别名,它同变量在使用形式上是完全一样的,它只作为一种标识对象的手段。不能直接声明对数组的引用,不能声明引用的引用,可以声明对指针的引用,也可以声明指向引用的指针。

② 引用与指针有相似之处,它可以对内存地址上存在的变量进行修改,但它不占用新的地址,从而节省开销。指针是低级的直接操作内存地址的机制,指针功能强大但极易产生错误;引用则是较高级的封装了指针的特性,它并不直接操作内存地址,不可以由强制类型转换而得,因而具有较高的安全性。

如何建立对数组的引用,可以通过typedef来实现,如下示例:

#include <iostream>
using namespace std;
void example6(){
	const int size = 5;				//声明const常量
	typedef int array[size];		//定义一个int型的数组标识符array
	array a = {10,20,30,40,50};		//对数组进行初始化
	array &b = a;					//引用数组a
	a[1] = 100;						//改变数组a中的值
	for(int i = 0;i<size;i++){		//循环数组b,数组b中的值也会跟着同步
		cout << *(b+i) << " ";
	}
	/**
	 * 打印结果:
	 *  10 100 30 40 50
	 */
}

5)、对指针使用const限定符(选择题)
① 指向常量的指针
指向常量的指针是在非常量指针前面使用const,例如:const int *p; 它告诉编译器"*p"是常量,不能将"*p"作为左值来操作,如下:

const int y = 50;
const int *p = &y;//指向常量的指针指向y,y是常量,不可以作为左值

再比如:

int x = 20;
const int *p = &x;//这时"*p"不能作为左值,但可以使用"x="来改变x的值,所以这个const仅仅是限定了使用"*p"的方式

② 常量指针
把const限定符放在*号的右边,使指针本身成为一个const指针,如下:

int x = 5;
int * const p = &x;//这个指针本身就是常量,编译器要求给它一个初始值,这个值在整个指针的生存周期都不会改变,但可以使用"*p="来改变其值

③ 指向常量的常量指针
例如:

int x = 2;
const int * const p = &x;//这时告诉编译器*p和p都是常量,限制了"&"和"*"运算符

6)、泛型算法应用于普通数组
要输出数组的内容、对数组进行升幂排序、反转数组的内容、复制数组的内容等操作,需要包含头文件

reverse(a,a+length);			//数组元素反转排列
copy(a,a+length,b);				//将数组a的内容复制到数组b
reverse_copy(a,a+length,b);		//将数组a的内容以逆向方式复制到数组b
sort(a,a+length);				//默认是升幂排序
copy(a,a+length,ostream_iterator<type>(cout,"字符串"));	//将数组内容按正向方式输送到屏幕
copy(a,a+length,ostream_iterator<type>(cout," "));		//在每个输出元素后面增加一个空格
copy(a,a+length,ostream_iterator<type>(cout,"\n"));		//在输出每个元素之后,换行

要对数组进行降幂排序和检索,需要包含头文件<functional‘>

sort(b,b+length,greater<type>());		//数组降幂排序
find(a,a+length,value);					//查找数组a内是否存在值为value的元素,它返回的是位置指针

7)、数据的简单输入输出格式
C++提供了两种格式控制方式:一种是使用iso_base类提供的接口;另一种是使用一种称为操控符的特殊函数,它的特点是可直接包含在输出和输入表达式中。不带形式参数的操控符定义在头文件中,带形式参数的操控符定义在头文件中。

常用操控符及含义

名称 含义
dec 设置转换基数为十进制
oct 设置转换基数为八进制
hex 设置转换基数为十六进制
endl 输出一个换行符并刷新流

resetiosflags和setiosflags的参数flag是引用C++的类ios_base里定义的枚举常量,所以要使用限定符"::"
在这里插入图片描述

(3)、程序的编辑、编译和运行的基本概念

用C++语言写成的程序被称为源程序,源程序必须经过C++编译器程序翻译成机器语言才能执行,其大概过程如下:

① 先使用编辑器编辑一个C++源程序my.cpp;

② 然后使用C++编译器对这个源程序进行编译,产生my.obj文件;

③ 再使用连接程序,将my.obj变成my.exe可执行文件。

集成环境:就是将C++语言的编辑、编译、连接、运行程序都集中到一个综合环境中去。

发布了31 篇原创文章 · 获赞 4 · 访问量 1525

猜你喜欢

转载自blog.csdn.net/qq_38471554/article/details/100627087