Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2566214
  • 博文数量: 315
  • 博客积分: 3901
  • 博客等级: 少校
  • 技术积分: 3640
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-08 15:32
个人简介

知乎:https://www.zhihu.com/people/monkey.d.luffy Android高级开发交流群2: 752871516

文章分类

全部博文(315)

文章存档

2019年(2)

2018年(1)

2016年(7)

2015年(32)

2014年(39)

2013年(109)

2012年(81)

2011年(44)

分类: C/C++

2012-06-02 11:57:19

lego@ubuntu:~$> 命名空间

#include

using namespace std;

namespace stdSwap   //增加命名空间也可以解决函数同名同参等冲突
{
    template
    void swap(T& a, T& b)
    {
        T temp = a;
        a = b;
        b = temp;
    }
};

template
void swap(T& a, T& b)
{
    T temp = a;
    a = b;
    b = temp;
}

template
int add(T& a, V& b)
{
    return  a + b;
}


int main(int argc, const char *argv[])
{
    double dx = 3.5, dy = 4.5;
    cout << dx << " " << dy << endl;
    cout << "swap(dx, dy)" << endl;
    //经过多种情况测试,::的作用就是在本命名空间下找该模板函数,不管是否定义命名空间;只要存在就行,不过,如果你写两个一模一样的模板函数,但是没有用命名空间去区分它们,这样肯定不行啦!
    //而命名空间::模板函数的调用,则需要提供命名空间,并且在空间内定义出模板函数,否则编译器无法找到!这就是::的机制,经过测试应该是如此。
    ::swap(dx, dy);             //加::避免和系统库函数发生冲突;
    //stdSwap::swap(dx, dy);    //增加命名空间后调用方式
    cout << dx << " " << dy << endl;

    int dz = 4;
    cout << "dx(4) + dz(3.5) = " << ::add(dx, dz) << endl;

    return 0;
}


lego@ubuntu:~$> 异常
 
 /*file: ecp.cpp
 *Explain:
 * 异常的机制粗解
 */
#include
#include
using namespace std;

class FILE_OPEN_ERROR{};

void tryCatch(const char *fileName);
void fileOpen(const char *fileName);

//这种的话就是属于异常申诉:提前告诉编译器,做好异常捕捉,减轻上游函数的压力:
//   异常沿着函数调用向上抛掷,这样上游函数压力就增大,也就是我们catch的那个函数,这块地方很多都不理解!其实我看来是机制不了解,更谈不上去使用异常了!
//void fileOpen(const char *fileName) throw (FILE_OPEN_ERROR);
//至于后面还有捕捉不到的异常的概念,这里主要时谈到Terminate,终止程序运行,这是无法回头的,它不属于栈结构,因此无法恢复我以前理解的上下文;
//  不过可以通过set_terminate(function_name)去修改默认处理方式!

void tryCatch(const char *fileName)
{
    //FILE *fopen(const char *path, const char *mode);
    try{
        fileOpen(fileName);
    }catch(FILE_OPEN_ERROR){
        cout << "File open error!" << endl;
    }
}

void fileOpen(const char *fileName)
{
        FILE *fp;
        fp = fopen(fileName, "r");
        if (fp == NULL) throw FILE_OPEN_ERROR();
}

int main(int argc, const char *argv[])
{
    //tryCatch("/home/akaedu/c++/exception/ecp.cpp");
    tryCatch("/home/akaedu/c++/exception/error.cpp");

    return 0;
}




阅读(1150) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~