第二章 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;
}

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





