目录
调用重载函数时,编译器会根据传入的实参与重载函数逐一匹配,根据结果决定调用哪个函数
1.命名空间
命名空间是C++语言的新特性,它能够解决命名冲突问题。命名空间包括两种,介绍如下:
1.标准命名空间
C++标准库几乎都定义在std命名空间中:
using namespace std;
2.自定义命名空间
使用namespace可以自定义命名空间:
namespace lib
{
void func(){}
}
如果要使用命名空间中定义的元素有下列三种方式:
(1)使用命名空间::元素方式
std::cout<<"C++"<<std::endl;
(2)使用using语句引用命名空间元素
using std::cout;
cout<<"C++";
(3)使用using引用命名空间
using namespace std;
2.控制台输入/输出
1.cin
cin与">>"运算符结合使用,用于读取用户输入,以空白为分隔符:
int a;
cin>>a;
3.类型增强
1.常变量类型const
c++中的常变量无法通过指针间接修改。
const int a=10;
int *p=&a;
*p=20;//无法修改
2.逻辑类型bool
bool类型用true表示真,false表示假。
bool a=true;
bool b=false;
3.枚举类型enum
c++中枚举变量只能用枚举常量进行赋值。
enum tem
{
WARM,
COOL,
HOT
};
enum tem t=WARM;
t=10;//错误
4.默认参数
c++的函数支持默认参数,在声明或定义函数时指定参数的默认值。
#include <iostream>
using namespace std;
void add(int x,int y=1,int z=2)
{
cout<<x+y+z<<endl;
}
int main()
{
add(1);//只传1给参数x,y,z使用默认参数
add(1,2);
add(1,2,3);
return 0;
}
5.函数重载
所谓函数重载,就是在同一个作用域内函数名相同但参数个数或参数类型不同的函数。
#include <iostream>
using namespace std;
void add(int x,int y)
{
cout<<x+y<<endl;
}
void add(double x)
{
cout<<x+10<<endl;
}
double add(double x,double y)
{
return x+y;
}
int main()
{
add(10.222222);//传入不同类型参数
add(1,2);
add(1.1,3.5);
return 0;
}
调用重载函数时,编译器会根据传入的实参与重载函数逐一匹配,根据结果决定调用哪个函数
重载函数有默认参数时会发生歧义。
6.引用
引用是C++引入的新特性,它是某一个变量的别名,使用‘&’符号格式如下
数据类型& 引用名=变量名
#include <iostream>
using namespace std;
int main()
{
int a=10;
int& ra=a;
cout<<"变量a的地址"<<hex<<&a<<endl;
cout<<"引用ra的地址"<<hex<<&ra<<endl;
cout<<"引用ra的值"<<hex<<ra<<endl;
return 0;
}
变量a的地址0x62fe14
引用ra的地址0x62fe14
引用ra的值a
使用引用有一些注意:
- 引用在定义时不能初始化
- 引用在初始化后不能绑定常量值
- 引用在初始化后其值不能再更改
引用的另一个重要作用是作为函数参数
#include <iostream>
using namespace std;
void exchange(int& x,int& y)
{
int t=x;
x=y;
y=t;
}
int main()
{
int a,b;
cin>>a>>b;
cout<<a<<b;
exchange(a,b);
cout<<a<<b;
return 0;
}
引用是隐式的指针,但引用却不等同于指针
- 指针指向一个变量,需要占据额外的内存单元,而引用并不是这样。
- 作为函数参数时,指针的实参是变量的地址,而引用的实参是变量本身,但系统向引用传递的是变量的地址而不是值。
- 常变量的引用必须是const引用,但const引用不是必须使用常量或常变量进行初始化,可以使用普通变量进行初始化,只是此时不允许通过该引用修改变量的值。
7.字符串类
C++提供了字符串数据类型,string定义在头文件string中,主要有一下几种方式定义:
string s1;
s1="hello C++";
string s2="hello C++";
string s3("hello C++");
string s4(6,'a');
8.new/delete
1.使用new运算符分配堆内存
new运算符用于申请一块连续的内存,格式如下:
new 数据类型(初始化列表);
数据类型表示申请的内存空间要存储数据的类型;初始化列表的是要存储的数据。如果内存申请成功,则new返回一个具体类型的指针,如果失败,则new返回NULL;
创建基本数据类型对象
char* pc=new char;
int* p=new int(10);
double* p1=new double();
创建数组类型对象
char *pc=new char[10];
2.使用delete运算符释放堆内存
delete 指针名;
delete []指针名;
9.extern"C"
在C++中,可以使用extern C标注C语言程序,会以C语言的方式编译
10.强制类型转换
C++提供了四个类型转换运算符应对不同类型数据之间的转换。
1.static_cast<>是最常用的类型转换运算符,主要执行非多态的转换。
它可以实现基本数据类型之间的转换,将任何类型转换为void类型,把空指针转换为目标类型的指针,用与类层次结构中基类和派生类之间指针和引用的转换
2.reinterpret_cast<type>(expression),通常为操作数的位模式提供较低层的重新解释,仅仅是复制比特位。
3.const_cast<type>,用于移除const对象的引用或指针具有的常量性质。
4.dynamic_cast<type>用于运行时检查类型转换是否安全