【C++教材复习】第1章 C++初步认识 ——(谭浩强教授版)

第1章 C++初步认识

目录

1.1 C++简介

1.3 C++对C的扩充

1.3.1 C++的输入输出 

1.3.2 用const定义常变量

1.3.3 函数原型声明

1.3.4 函数的重载

1.3.5 函数模板

1.3.6 有默认参数的函数

1.3.7 变量的引用

1.3.8 内置函数(内联函数)

1.3.9 作用域运算符

1.3.10 字符串变量

1.3.11 动态分配 / 撤销内存的运算符 new 和 delete


1.1-1.2 C++简介

最初C++被称为"带类的C",相较于C增加了面向对象的机制

面向对象的机制,是针对较大规模程序提出的

有系统提供的头文件不需要带后缀.h

:把一组数据和有权调用这些数据的函数封装到一起

类可以体现数据的封装性和信息隐蔽性

被指定为私有的数据或函数只能被本类的成员函数调用,也可以被类外的语句调用(友元类成员除外)。

对象:具有“类”类型特征的变量

1.3 C++对C的扩充


1.3.1 C++的输入输出 

字符输出指定所占的列数 ,可以使用控制符setw设置,但是要添加头文件<iomanip>

#include <iostream>
#include <iomanip>
using namespace std;

int  main()
{
	int a = 6;
	cout << "a=" << setw(6) << a << endl;

}

可能遇到的问题及解决方法无法打开包括文件:“iomanip.h”

1.3.2 用const定义常变量

C语言常用#define命令来定义符号常量,只是进行了“字符置换”,容易出错。

/* #define 定义常量 的弊端 */
#include <iostream>
#include <iomanip>
using namespace std;

#define  pi  3.1415
int a = 1; 
int b = 2;
#define  he   a + b   //define 后面没有顿号

int  main()
{
	cout << pi * he  * he << endl;   //  pi*a + b*a + b 
	cout << pi * (he)  *( he) << endl;  // pi * (a+b) * (a+ b) 
}

C++用const定义长变量,占用内存空间,值不可更改:

const float PI=3.14159;

1.3.3 函数原型声明

C语言,函数调用的位置在函数定义之前,则应在函数调用之前对所调用的函数做声明,调用函数是整型的,可以不进行函数声明。

int max(int x, int y);
//C语言简写形式
//C++不允许
int max();
max();

1.3.4 函数的重载

C语言中,几个不同名的函数实现类似功能,如三个数求最大的数。

C++中,可同一函数名定义多个函数,,这些函数的参数个数与参数类型不同,这就是函数重载。即一个函数名多用

系统会根据实参的类型找到与之匹配的函数,然后调用。

例1.7 用一个函数求2个整数或3个整数的最大者。(假设某个变量为最值,再更新,代码简洁)

#include <iostream>
using namespace std;

int  max(int a, int b)
{
	if (a > b) b = a;
	return  b;

}
int  max(int a, int b, int c)
{
	if (a > b)  b= a;   //假设b为最大值,充分利用if 来更新,和每个数来比较
	if (c > b)  b =c;  //代码简洁,选择一个变量为最大值,临时变量,更新后返回,
	return b;

}

int  main()
{	
	int a = 18,b =13, c = 14;
	int max_2=max(b, c);
	int max_3=max(a, b, c);
	cout << "max_2=" << max_2 << endl;
	cout << "max_3=" << max_3 << endl;
}

1.3.5 函数模板

提出的背景:函数重载虽然实现一个函数名多用,将实现相同或类似功能的函数用同一个函数名来定义,但是任需要定义多个函数。因此提出了函数模板:建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。

凡是函数体相同的函数都能用这个模板来代替。

模板声明 、通用函数定义:

template<typename T>  //模板声明,没有分号,会出错 
template<typename T> ; template<class T>;//通用函数定义

例1.8  使用模板函数来求各种类似的数值比较(模板声明处没有分号)

#include <iostream>
using namespace std;
template <typename T>  //后面没有;,有些教材错写
T max(T a,T b, T c)

{
	if (a > b)  b= a;   //假设b为最大值,充分利用if 来更新,和每个数来比较
	if (c > b)  b =c;  //代码简洁,选择一个变量为最大值,临时变量,更新后返回,
	return b;
}

int  main()
{	
	int a = 18,b =13, c = 14;
	float e = 11.5, f = 9.5, g = 20.3;
	a=max(a, b, c);
	e = max(e, g, f);   //无关变量重复利用
	cout << "max_int=" << a << endl;
	cout << "max_float=" << e << endl;
}

1.3.6 有默认参数的函数

给函数的形参赋默认值,可以每个形参都有一个默认值,也可以部分形参指定默认值。

实参和形参的结合是从左向右匹配结合的。

因此,多个形参时,指定默认值的参数必须放在形参表列的最右端

void f1(float a,int b=0,int c, char d='a');  // xx错误xx
void f2(float a,int c, int b=0,char d='a');  // √√正确√√

注意事项:1)最好函数声明时指定默认值,否则容易混与错误!!以声明为主!   

2)一个函数不能同时作为重载函数和有默认值得函数!

1.3.7 变量的引用

引用(reference)就是变量的别名,引用不是一个独立变量,不单独占内存单元.

对一个变量的“引用”的所有操作,实际就是对原来变量的操作。

int a=3,b=4;
int &c=a;  //声明c是整型变量的别名
&b= c;//声明b是整型引用c的别名

C++之所以增加“引用”,主要是利用他作为函数参数,以扩充函数传递数据的功能,即"引用形参"

相当于将实参的地址传给了引用的形参,他们是同一个变量。

#include <iostream>
#include <iomanip>   // 使用setw 必须加入该符号
using namespace std;
template <typename T>  //后面没有;,有些教材错写

void swap_z(T &a,T &b)

{
	T temp=a;
	a = b;
	b = temp;
}

int  main()
{	
	float a = 1.023;
	float  b = 15.2;
	cout << "a=" <<setw(6)<< a << "  b= " << b << endl;
	swap_z(a, b); //不需要传地址
	cout << "a=" << setw(6) << a << "  b= " << b << endl;


}

1.3.8 内置函数(内联函数)

常调用的函数前加 "inline"

1.3.9 作用域运算符

规定:main函数中的局部变量将屏蔽同名的全局变量,可使用作用域运算符“::”,它能输出同名的全局变量。

 例 1.16 局部变量和全局变量同名。

#include <iostream>

using namespace std;
float a = 3.1415;

int  main()
{	
	int a = 5;
	cout << " a="<<a << endl;       //输出局部变量a的值
	cout <<" ::a="<< ::a << endl;   //输出全局变量a的值

}

1.3.10 字符串变量

#include <string>
string name[5]={"zhang","li","wang","zeng","yu"}

1.3.11 动态分配 / 撤销内存的运算符 new 和 delete

C语言中,使用 malloc 和 free 分配和撤销内存空间。但是malloc必须指定需要开辟的内存的大小。调用形式为 malloc(size). malloc函数返回值一律为 void * 类型,必须强制装换才能使返回指针指向具体的类型

new int;       //开辟一个存放整数的空间,返回一个指向整型数据的指针
new int(100);  //开辟一个存放整数的空间, 并指定整数的初值为100

 


C++上机实践:GCC与 Visual C++集成环境,GCC编译系统最接近C++标准

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曾小蛙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值