注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

C++小知识47——C++中using的用法  

2014-01-15 14:32:20|  分类: C++(VC)编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

C++小知识47——C++using的用法

C++using的用法大家最广为知道的当然是名字空间的使用。比如大家经常使用标准中,特别是一些书上经常如下写代码:

#include <list>

Using namespace std;

这样不是不行,只是有商榷的地方,举个简单例子,如果有一个自己的库,然后用了上面的方法,那么你的库中的所有的公有的东西就全部暴露出来了。你可能会问,这又有啥?确实是没有啥。还是一句话么,封装,既然封装好了,有些东西还是就不要暴露为妙。另外还有一种,比如大家都在各自的空间声明了一重名的变量,那么因为名空间的原因,可能不会报错,但如果连续这样using namespace xx;using namespace ab;这样,下面的程序如果调用这个重名的变量,就可能会报错,如果你自己当前的名空间里还有一个同名的变量,那么就可能不会报错,但是达不到效果。所以说值得商榷。

可是对于标准库,倒是未必坚持这样,当然。这个得看个人的习惯了。因为对于标准库来说,这个本身就是对所有的人都开放的,你在写程序的时候儿也要尽量避免和标准库重名,防止程序的可移植性下降。

另外一个using的用法,是比较少的,因为很多人再写程序的时候儿会有意无意的避免开这种现象。

看一下下面的程序:

#include <string.h>

#include <string>

 

class Base

{

public:

Base(){}

virtual ~Base(){}

 

virtual void print(int a) { printf("A:%d\r\n",a);}

virtual void print(const std::string & str )

{

printf("Base:%s\r\n",str.c_str());

}

};

 

 

class Derived: public Base

{

public:

Derived(){}

virtual ~Derived() {}

using Base::print;//此处注意,只是声明,不中带形参列表

virtual void print(int a) { printf("Derived:%d\r\n",a);}

 

 

};

int _tmain(int argc, _TCHAR* argv[])

{

Derived* d = new Derived();

 

d->print("xxx");

d->pring(10);

 

return 0;

}

如果将上面加黑的部分去掉,因为在继承类中没有合适的重载函数,编译器会报一个错误。其实这个很简单,只是为了让父类的成员显示的可以被子类和外部调用。

这个在C++primer中叫做“在子类中使用 using 声明引入基类成员名称”

好好学习,天天向上。时不我待,失不再来。

  评论这张
 
阅读(1078)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017