第一章 C++语言简介

自学考试教材《C++程序设计》
作者:辛运帏,陈朔鹰
版本:2019
课程代码:04737

一,基本输入输出

需要引用的头文件和命名空间:

#include <iostream>
using namespace std;

输出:

cout << "输出信息1"<<"输出信息2"<<"输出信息3";

输入:

int value1, value2;
cin >> value1 >> value2;

二,头文件和命名空间

1.使用系统提供的头文件

C++与C语言一样,使用头文件保存程序中用到的声明。C++中头文件不再以.h结尾。

#include <iostream>

常用的头文件如下:

标准输入输出流:<iostream>
标准文件流:<fstream>
标准字符串处理函数:<string>
标准数学函数:<cmath>

2.使用自定义的头文件

#include "C:\custom\custom.h"

3.命名空间

C++中为了避免名字定义冲突,引入了命名空间的定义,命名空间的作用是为了消除同名引起的歧义。
定义一个命名空间:

namespace
{
	//命名空间内的各种声明(函数声明,类声明,...)
}

使用一个命名空间内的成员:

//引入命名空间
using namespace std;
//直接使用命名空间下的函数
std::cout << "输出信息1"<<"输出信息2"<<"输出信息3";

三,强制类型转换运算符

强制类型转换运算符:static_cast

	float value_f = 3.141592653;
	//强制类型转换运算符的标准形式
	int value_i = static_cast<int>(value_f);
	//强制类型转换运算符的新形式
	int value_i = int(value_f);
	//强制类型转换运算符的旧形式
	int value_i = (int)value_f;
	//自动类型转换
	int value_i = value_f;

去除常量性运算符:const_cast
该运算符用于去除指针和引用的常量性,但不能去除变量的常量性。

int a = 10;
const int* p = &a;
int* b = const_cast<int*>(p);

四,函数参数默认值

在C++语言中,可以在声明函数时为形参指定默认值。当调用有默认参数值的函数时,调用语句中可以不给出对应的实参,这就相当于调用该函数时以默认值作为参数。

//第二个形参指定默认值
void func1(int a, int b = 1);
//第二个形参指定默认值(省略变量名)
void func2(int a, int = 1);

五,引用和函数参数传递

1.引用

引用相当于给变量起了个别名。变量对应于某个内存地址,如果给某个变量起了别名,相当于变量和这个引用都对应到同一地址。
需要注意的是:1.不能使用常量或者表达式初始化引用。2.不能声明引用的引用。

//正确,b和c都是a的引用
int a = 30;
int& b = a;
int& c = b;
//正确,func1方法返回int类型的引用
int& func1();
int& a = func1();
//错误,不能使用常量初始化引用
const int a = 30;
int& b = a;
//错误,不能使用表达式初始化引用
int a = 30;
int b = 10;
int& c = a + b;
//错误,不能声明引用的引用
int a = 30;
int& b = a;
int& c = &b;

2.常引用

定义引用时,可以在定义的前面加const关键字,表明该引用是常引用。不能通过常引用去修改其引用的变量。

//错误,不能通过常引用去修改其引用的变量
int a = 10;
const int& b = a;
b = 20

3.引用在函数中的使用

在C++中,函数调用时,参数的传递有两种方式:传值和传引用。
传值:函数形参不是引用,函数被调用时,将实参的值拷贝给形参。函数对形参的操作在函数结束时不会保留。
传引用:函数形参是引用,函数被调用时,将实参的地址拷贝给形参。函数对形参的操作在函数结束时会保留。

void func1(int a) 
{
	a += 1;
}
void func2(int& a)
{
	a += 1;
}
int main()
{
	int b = 5;
	func1(b);
	cout << b;//输出b为:5
	int c = 5;
	func2(c);
	cout << c;//输出c为:6
}

六,const与指针共同使用

与C语言一样,C++语言也可以使用const限定访问权限,告诉编译器,它所修饰的量是不能改变的,也就是不能作为左值使用。程序中使用指针时,涉及的量有两个:一个是指针本身,另一个是指针所指向的内容。
根据const书写的位置不同语句的含义也不同
1.如果唯一的const位于符号*的左侧,表示指针所指的数据是常量,数据不能通过本指针改变,但可以通过其他方式修改。指针本身是变量,可以指向其他的内存单元。

int a = 5;
const int* b = &a;

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

int a = 5;
int* const b = &a;

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

int a = 5;
const int* const b = &a;

4.const修饰规则的简记:cosnt修饰其左侧的内容。如果const是本行的第一个标识符,则它修饰其右侧的内容。

七,内联函数

函数调用过程:函数调用时,需要保存主调函数的现场和返回地址,要在栈中为形参和局部变量分配存储空间,要实现实参和形参的参数传递,然后程序转移到被调函数的起始地址继续执行。被调函数执行结束后,要从栈中回收形参和局部变量占用的存储空间,要恢复主调函数的现场,取出返回地址,有返回值的要将返回值赋给函数调用本身,最后在返回地址处开始继续执行。

内联函数的格式:在函数的返回值类型前面加上关键字inline,如:

inline void func(){}

原理:编译时,编译程序会将内联函数的函数体代码复制到调用该函数的位置,而不会编译成函数调用指令。也就是说,内联函数不是在调用时发生控制转换,而是在编译时将函数体嵌入在每一个调用处。从而降低程序运行时间上的开销。

什么时候使用内联函数:内联函数一般仅适用于只有几条语句的小函数,如果函数体内有循环语句和switch语句,通常不定义为内联函数。事实上,如果将一个复杂函数定义为内联函数,大多数编译器会自动的将其作为普通函数来处理。在函数定义时加上inline关键字仅仅是提示编译器,程序员希望函数是内联函数,编译器根据自己的处理方式可能忽略这一提示。

八,函数的重载

函数的签名包括:函数的名字以及参数列表。

具有相同函数名的两个及以上的函数,其形参的个数或者类型不同(具有不同的签名),编译器根据实参和形参的类型和个数的最佳匹配,自动确定调用哪一个函数。

void func();
void func(int a, float b);
void func(float b, int a);

九,指针和动态内存分配

1.指针

指针变量中保存的是一个地址,有时也称指针指向一个地址。

int a = 10;
int* b = &a;

2.动态内存分配

在程序设计中,经常会遇到需要根据待处理的数据量确定数组大小的情况。如果没有办法提前知道数据量的多少,往往会分配一个尽可能大的数组。一方面,如果数据量没有那么多,则可能会造成空间浪费。另一方面,如果数据量超出了预估,则会造成数组容量不足。

动态内存分配:在程序运行期间,根据实际需要,临时分配一段内存空间用于存储数据。
静态内存分配:在程序编译时,就能确定占用内存的大小。

在C++语言中,使用new运算符实现动态内存分配,使用delete释放内存空间。
1.为变量动态分配内存空间

int* a = new int;
*a = 5;
delete a;

2.为数组动态分配内存空间

int* a = new int[100];
delete []a;

使用new运算符动态分配内存空间,一定要使用delete运算符释放,否则会造成这部分内存不会被操作系统回收,从而成为被白白浪费掉的内存垃圾,这种现象被称为内存泄漏

十,用string对象处理字符串

一个整数直接保存在一个整形变量中。而string对象所代表的字符串保存在内存中,这段内存的首地址保存在string对象中。

1.声明string对象

想要使用string对象,需要在程序中包含头文件string

#include <string>
//string变量
string a = "name";
//string数组
string b[] = { "name","age" };
//使用字符数组对string变量进行初始化
char c[] = "name";
string d = c;

2.使用string对象提供的成员函数

成员函数解释
c_str将string转换为const char*
size返回当前字符串的大小
length返回当前字符串的长度
empty判断当前字符串是否为空
find返回指定字符串第一次出现的位置(下标),没有找到返回-1
insert在指定位置插入指定字符串
append将指定字符串连接到当前字符串结尾处
substr返回从指定位置开始的指定个数的字符构成的字符串
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值