// demo3.cpp : 定义控制台应用程序的入口点。
//通过此例程了解内联函数,c++类型转换,模板,异常捕获
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
using namespace std;
template<class T>
class CTest
{
public:
T GetMax(T a,T b);
T Div(T a,T b);
};
template<class T>
T CTest<T>::GetMax(T a,T b)
{
return (a>b)?(a):(b);
}
template<class T>
inline T CTest<T>::Div(T a,T b)//内联函数,注意CTest<T>::和普通的CTest::的区别
{
if (b==0)
{
throw "除数不能为零!";
}
return a/b;
}
int _tmain(int argc, _TCHAR* argv[])
{
CTest<float> test;//声明一个模板对象,有没有发现这和STL里的库很像,STL里本来就是模板嘛
float l_fResult;
l_fResult=test.GetMax(12.5,13.5);
cout<<l_fResult<<endl;
int l_nResult=static_cast<int>(l_fResult);//静态类型转化,如果执行强制类型转化会发生警告,以为将float -->int 数据会丢失
cout<<l_nResult<<endl;
try
{
cout<<test.Div(20,5)<<endl;
cout<<test.Div(20,0)<<endl;
}
//异常捕获
catch (char *e)
{
cout<<e<<endl;
}
const int t=10;
cout<<"const t:"<<t<<endl;
int &m=const_cast<int&>(t);
const_cast<int&>(t)=20000;
cout<<"t:"<<t<<endl;
m=1000;
cout<<"m:"<<m<<endl;
int *n=const_cast<int*>(&t);
*n=200;
cout<<"n:"<<*n<<endl;
cout<<"&t:"<<&t<<endl;
cout<<"&m:"<<&m<<endl;
cout<<"&n:"<<n<<endl;
//.通过以上测试发现,经过const转换后t仍然不能修改,m,n可以修改,t,m,n指向同一块内存---》const_cast一般可以出现在函数调用时,非const形参传const实参时进行的转换
system("pause");
return 0;
}