第二章 C++对C的改进和扩展

本文详细介绍了C++相较于C语言的多项改进和扩展,包括I/O流的引入、单行注释、const定义常量、强制类型转换、bool类型、名字空间、局部变量定义、域解析符、函数参数默认值、内联函数、函数重载、引用的灵活应用、动态内存管理及异常处理等。通过具体示例,展示了这些特性的使用方法。

第二章 C++对C的改进和扩展

2.1 函数中一些基本控制的区别

2.1.1 C++用I/O流实现输入输出

#include<stdio.h>
int main()
{
	char c;
	int a;
	float f;
	scanf("%c%d%f",&c,&a,&f);
	a=a+c;
	f=f+2*a;
	printf("c=%c a=%d f=%.1f\n",c,a,f);
	return 0;
}

在这里插入图片描述

#include<iostream>
using namespace std;
int main()
{
	char c;
	int a;
	float f;
	cin>>c>>a>>f;
	a=a+c;
	f=f+2*a;
	cout<<"c="<<c<<" a="<<a<<" f="<<f<<endl;
	return 0;
}

在这里插入图片描述

2.1.2 新增的单行注释//

2.1.3 使用const定义常量

#include<iostream>
using namespace std;
int main()
{
	int x=5;
	const int T1=x+x;
	const int T2=x-x;
	cout<<"T1="<<T1<<" T2="<<T2<<endl;
	return 0;
}

在这里插入图片描述

2.1.4 新增的强制类型转换方式

#include<iostream>
using namespace std;
int main()
{
	float f=100.23;
	int x=(int)f;
	int y=int(f);     //c++新增
	cout<<x<<" "<<y<<endl;
	return 0;
}

在这里插入图片描述

2.1.5 新增bool类型

#include<iostream>
using namespace std;
int main()
{
	bool f=1<2;
	cout<<f<<" "<<boolalpha<<f<<" "<<noboolalpha<<f<<endl;
	return 0;
}

在这里插入图片描述

2.1.6 名字空间

C++语言提空名字空间(namespace)防止命名冲突。

2.2 有关函数的区别

2.2.1 局部变量随用随定义

#include<iostream>
using namespace std;
int main()
{
	int i=123;
	cout<<"i="<<i<<endl;
	{
	for(int i=0;i<9;i++)
		cout<<"I love you"<<endl;
	return 0;
	}
}

在这里插入图片描述

2.2.2 域解析符::扩大全局变量的可见范围

#include<iostream>
#include<iomanip>
using namespace std;
int sum=5000;  //全局变量
int main()
{
	int arr[3]={10,20,30};
	{
		int i,sum=0;   //局部变量
		for(i=0;i<3;i++)
			sum+=arr[i];
		cout<<"sum="<<sum<<endl; //60
		::sum+=sum;
		cout<<"全局sum="<<::sum<<endl; //5060
	}
	sum*=2;  
	cout<<"sum="<<sum<<endl; //10120
	int sum=200;  //局部变量
	cout<<"sum="<<sum<<endl;
	::sum+=sum;
	cout<<"全局sum="<<::sum<<endl;//10320
	return 0;
}

在这里插入图片描述

2.2.3 形式参数可带默认值

#include<iostream>
using namespace std;

void Fun(int i,int j=5,int k=10);

int main()
{
	Fun(20);
	Fun(20,30);
	Fun(20,30,40);
	return 0;
}

void Fun(int i,int j,int k)
{
	cout<<i<<" "<<j<<" "<<k<<endl;
}

在这里插入图片描述

2.2.4 内联函数

#include<iostream>
using namespace std;

inline int Multiply(int x,int y)
{
	return x*y;
}

int main()
{
	int a=Multiply(3+4,2+3);
	cout<<"a="<<a<<endl;
	return 0;
}

在这里插入图片描述

2.2.5 函数重载

#include<iostream>
using namespace std;

//形参个数类型顺序不同,可以用相同函数名
int square(int x)
{
	return x*x;
}

float square(float x)
{
	return x*x;
}

double square(double x=1.5)
{
	return x*x;
}

int main()
{
	cout<<"square()="<<square()<<endl;
	cout<<"square(10)="<<square(10)<<endl;
	cout<<"square(2.5f)="<<square(2.5f)<<endl;
	cout<<"square(1.1)="<<square(1.1)<<endl;
	return 0;
}

在这里插入图片描述

2.3 新增引用的灵活应用

2.3.1引用的概念及使用

#include<iostream>
using namespace std;

int x=5,y=10;
int &r=x;

void print()
{
	cout<<"x="<<x<<" y="<<y<<" r="<<r<<endl;
	cout<<"x Address:"<<&x<<endl;
	cout<<"y Address:"<<&y<<endl;
	cout<<"r Address:"<<&r<<endl;
}

int main()
{
	print();
	r=y;
	y=100;
	print();
	x=200;
	print();
	return 0;
}

在这里插入图片描述

2.3.2 引用作为形参

#include<iostream>
using namespace std;

void swap( int &x,int &y)
{
	int t=x;
	x=y;
	y=t;
}

int main()
{
	int a=3,b=5;
	cout<<"a="<<a<<" b="<<b<<endl;
	swap(a,b);
	cout<<"a="<<a<<" b="<<b<<endl;
}

在这里插入图片描述
使用const 修饰符保证对应实际参数变量不能被修改

#include<iostream>
using namespace std;

void Fun(const int &x,int &y)
{
	y++;

	//x++报错
}

int main()
{
	int a=3,b=5;
	cout<<"a="<<a<<" b="<<b<<endl;
	Fun(a,b);
	cout<<"a="<<a<<" b="<<b<<endl;
}

在这里插入图片描述
在这里插入图片描述

2.3.3 引用和指针的区别

实质、初始化、可变性、是否有空值、占用空间情况、访问方式、
安全有效性

2.3.4 引用作为返回值

#include<iostream>
using namespace std;

int &Fun(const int &x,int &y ,int z)
{
	z++;
	y=x+y+z;
	return y;
}

int main()
{
	int a=1,b=2,c=3,d=0;
	cout<<"a="<<a<<" b="<<b<<" c="<<c<<" d="<<d<<endl;
	Fun(a,b,c);
	cout<<"a="<<a<<" b="<<b<<" c="<<c<<" d="<<d<<endl;
	d=Fun(a,b,c);
	cout<<"a="<<a<<" b="<<b<<" c="<<c<<" d="<<d<<endl;
	Fun(a,b,c)=20;
	cout<<"a="<<a<<" b="<<b<<" c="<<c<<" d="<<d<<endl;
	return 0;
}

在这里插入图片描述

2.4 动态内存空间管理

2.4.1 用new申请动态内存空间

int *ptr;
ptr=new int;
ptr=new int[10];

2.4.2 用delete释放动态内存空间

delete ptr;
delete []ptr;

2.4.3 void类型的指针

2.5 C++中的异常处理

#include<iostream>
using namespace std;

int divide(int x,int y)
{
	if(y==0) throw y;
	return x/y;
}

int main()
{
	int a=10,b=5,c=0;
	try
	{
		cout<<"a/b="<<divide(a,b)<<endl;
		cout<<"b/a="<<divide(b,a)<<endl;
		cout<<"a/c="<<divide(a,c)<<endl;
		cout<<"c/b="<<divide(c,b)<<endl;
	}
	catch(int)
	{
		cout<<"expect of divide zero"<<endl;
	}

	cout<<"calculate finished"<<endl;
	return 0;
}

在这里插入图片描述

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值