C++比C多了什么。。。(高级篇)
来源:互联网 发布:javascript 第六版pdf 编辑:程序博客网 时间:2024/05/01 04:53
写完了基础的不同,在看看高级的一些用法吧。 真正的高手都差在深入的研究上,我估计也就算是个装高手的。关于基础的不同可以参见:C++比C多了什么。。。(基础篇)
一、模板
1、函数模板
模板(Templates)使得我们可以生成通用的函数,这些函数能够接受任意数据类型的参数,可返回任意类型的值,而不需要对所有可能的数据类型进行函数重载。这在一定程度上实现了宏(macro)的作用。
#include<iostream>using namespace std;template <class T> T getmax(T a,T b){ return a>b?a:b;}int main(){ int a=3; int b=4; float c =5.5; float d =6.6; cout<<getmax(a,b)<<endl; cout<<getmax(c,d)<<endl;}运行输出为: 4 6.6
2、类模板
不但函数可以应用类同样也可以。应用了模板,就变成了模板类
#include<iostream>using namespace std;template <class T> class A{ T a;public : A(T t){a=t;} T get_value();};template <class T> T A<T>::get_value(){ return a;};int main(){ A<int> a(3); cout<<a.get_value()<<endl;}
3、模板特殊化#include<iostream>using namespace std;template <class T> class A{ T a;public : A(T t){a=t;} T get_value();};template <class T> T A<T>::get_value(){ return a;};template <> class A<float>{ //特殊化模板为float float a;public : A(float t){a=t;} float get_value();};float A<float>::get_value(){ return a+0.00234;};int main(){ A<int> a(3); A<float> b(4.5); cout<<a.get_value()<<endl; cout<<b.get_value()<<endl;}
运行输出为: 3 4.50234
二、名空间
通过使用名空间(Namespaces)我们可以将一组全局范围有效的类、对象或函数组织到一个名字下面。换种说法,就是它将全局范围分割成许多子域范围,每个子域范围叫做一个名空间(namespaces).
#include<iostream>using namespace std;namespace haha{ string s= "hahaha";}namespace gaga{ string s= "gaga";}namespace heihei{ string s = "heihei";}using namespace haha;int main(){ cout<<s<<endl; cout<<gaga::s<<endl;}
三、出错处理
这个和java差不多了,就不细说了,没什么特别的。
#include<iostream>using namespace std;int main(){ try{ char a[10]; for(int i=0;i<20;i++){ if(i>9) throw i; a[i] = i; } }catch(int i){ cout<<"Exception : "<<i<<endl; }}
四、类型转换
ANSI-C++ 标准定义了4种新的类型转换操作符: reinterpret_cast, static_cast, dynamic_cast 和 const_cast。
reinterpret_cast 可以将一个指针转换为任意其它类型的指针。它也可以用来将一个指针转换为一个整型,或反之亦然。
static_cast 可以执行所有能够隐含执行的类型转换,以及它们的反向操作(即使这种方向操作是不允许隐含执行的)。
dynamic_cast 完全被用来进行指针的操作。它可以用来进行任何可以隐含进行的转换操作以及它们被用于多态类情况下的方向操作。然而与static_cast不同的是, dynamic_cast 会检查后一种情况的操作是否合法,也就是说它会检查类型转换操作是否会返回一个被要求类型的有效的完整的对象。
const_cast 这种类型转换对常量const 进行设置或取消操作:
class C {}; const C * a = new C; C * b = const_cast<C*> (a);
其他3种cast 操作符都不可以修改一个对象的常量属性。
五、预处理指令
#define name value 宏定义,用value完全替换name
#undef name value 取消刚才的宏定义。通常用来重定义宏
#ifdef, #ifndef, #if, #endif, #else and #elif(elif=else if) 定义条件的逻辑应用
#if MAX_WIDTH>200 #undef MAX_WIDTH #define MAX_WIDTH 200 #elif MAX_WIDTH<50 #undef MAX_WIDTH #define MAX_WIDTH 50 #else #undef MAX_WIDTH #define MAX_WIDTH 100 #endif char str[MAX_WIDTH];
- C++比C多了什么。。。(高级篇)
- C++比C多了什么。。。(基础篇)
- Swift比Objective-C有什么优势?
- Swift比Objective-C有什么优势
- C语言高级篇
- C语言学了有什么用呀
- 学了c之后,该学什么
- c语言给了我什么?
- c++ 比C多了俩加号,所以c++很nb!c#比c++还多俩加号,所以c#更nb!
- C语言高级篇(数据结构) --- 链表
- extern"C"到底做了什么,起流什么作用
- 学了C/C++,我能做什么?
- 操作系统、硬件、高级语言(如C)有什么关系?希大侠赐教,不胜感激!
- C++/C高级数据类型
- C#高级(二)类
- Problem C 比大小
- 坑比C语言
- C语言中常用const声明常量有什么好处呢?(get了吗?)
- 中国SOC安全管理平台市场应用现状有奖调查
- is_trivially_destructible replaced has_trivial_destructor
- 2011年9月份工作小结
- [IT最前沿--有点道理] 从麦当劳肯德基到iPhone/iPad,这是个触摸的时代
- C语言中malloc与free
- C++比C多了什么。。。(高级篇)
- localhost:8080打不开原因解决方法
- 软件工程师职场面试
- 很好的 开源 文件系统加密软件 TrueCrypt
- WindowManager.LayoutParams
- 袁隆平:愿为科学献身吃吃抗病抗虫转基因大米
- web7b病毒的解决方法
- json_dom
- Visual C++ 2010 Express Tips: 编写C语言程序