namespace/重载/引用
来源:互联网 发布:网络推销授权员合同 编辑:程序博客网 时间:2024/06/01 08:16
(以下遵循markdown语法)
//命名空间问题using namespace std;//使用标准库命名空间//函数重载int add(int i, int j);int add(int i, int j, int k);//对add函数重载//指针&引用int add(int* i ,int* j);//指针int add(int &i ,int &k);//引用
初学者常对以上语句十分疑惑,整理资料作以下解释:
1. 如何理解命名空间
为什么要设计命名空间
大型工程多开发者时会出现命名冲突:
大型工程常由多个开发者共同编写,在主程序include多个头文件时,多个头文件可能包含名字相同的变量,此时这一组变量处于同一个作用域,产生了命名冲突。用户自定义的变量名与用户使用的标准库中的名字冲突:如程序员定义函数cout,cout非语言标识符,但在include时,会与标准库命名冲突。
解决方案:引入命名空间,常见用法:
using namespace std;
使用标准库命名空间,此时所有std中出现的命名(如cout)全部指向std中的定义。
using std::cout;
使用std中的cout,其它同上
在以下条件下:
namespace name1{ int age=18;}namespace name2{ int age=21;}
我们可以同时
cout<<name1::age<<endl;cout<<name1::age<<endl;
此外,我们可以同时使用using namespace std& using std::cout,再对部分变量指定命名空间
//在上述代码基础上using namespace name1;cout<<age<<endl;//18cout<<name1::age<<endl;//18cout<<name2::age<<endl;//21
2. 重载(C++为什么支持重载?)
使用方法:
int add(int i, int j){ return i+j;} int add(int i, int j, int k)//对add函数重载{ return i+j+k;}
在主程序中我们可以
int i, j, k;i=j=k=1;cout<<add(i,j)<<endl;//2cout<<add(i,j,k)<<endl;//3
对从C语言过来的人来说,这种方法简直不可思议。事实上形参不同时,C++允许同名函数的出现。
为什么C不可以?
- (知识回顾,可跳过) 易知,从码完代码到运行,编译器需要进行
- 预处理(包含头文件、注释的删除、标识符与宏的替换)
- 编译(语法、语义、符号的分析,并对符号进行汇总)
- 汇编(生成符号表,同时汇编生成二进制代码)
- 链接(符号表合并、重定位、合并段表)
c++对函数名的存储通过添加形参类型的后缀实现对同名函数的区分(重载)
int add(int i, int j);//存储为_add_int_intint add(int i, int j, int k);//存储为_add_int_int_int
由于C未对函数名的存储作区分,因此C不能出现同名函数。
- (知识回顾,可跳过) 易知,从码完代码到运行,编译器需要进行
3. 引用的简析
指针和引用(概念、使用方法、做参数、做返回值的作用,指针和引用的区别)
概念&使用方法:
我们知道,形参是实参的拷贝,因此在C语言为了改变实参的值我们常使用指针的形式传递参数
int add(int* i ,int* j);//指针
C++引入新的语法:引用
int add(int &i ,int &k);//引用
有别于指针的是:
- 指针变量存储原变量的地址
- 引用是创建原变量的别名,此过程中不创建一个特殊变量去存储地址
引用的出现,可以替代部分原指针的使用,使程序更安全(指针危险)、效率高(减小内存开销),更能解决部分原来指针无法解决的问题,如拷贝构造函数
- 引用解决的问题实例:
对如下代码
class time { time(time t)//目标为实现一个“拷贝构造函数” { ······ } }//但事实上形参t的创建又会触发“拷贝构造函数”,最终无限循环,使用引用可解决此问题。
class time{ time(time &t)//目标为实现一个“拷贝构造函数”//t只是一个别名,不会创建新的对象 { ······ }}
对拷贝构造函数等的解析,详见(预留)
- namespace/重载/引用
- c++ 基础知识(输入输出、namespace命名空间、引用、函数重载模版、内存管理)
- 引用参数的重载
- 重载与引用
- C++之引用&重载
- 引用和函数重载
- 函数重载&引用变量
- using namespace 引用命名空间理解
- c++ const 重载 和 引用
- 【c++程序】引用和重载
- C++重载,指针和引用
- NAMESPACE
- namespace
- namespace
- namespace
- namespace
- namespace
- namespace
- URL中# ? &的作用
- 流缓冲区的特化版本(适用于通用tcp业务包)
- java 接口回调
- jQuery--5.筛选
- CodeForces
- namespace/重载/引用
- numpy的用法(二)
- Webstorm常用快捷键
- Spring--11.对c3p0的操作
- Linux下用ifconfig命令设置IP、掩码、网关
- 用VPS搭建IPv6的VPN
- jQuery--6.事件
- 线性回归
- Engineer Assignment HDU