c++训练营--内联函数,c++类型转换,模板,异常捕获

// 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;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值