详细解读c++异常模板复习

简介: 详细解读c++异常模板复习

1 // ConsoleApplication1.cpp : 定义控制台应用程序的入口点。

2 //

3

4 #include "stdafx.h"

5 #include

6 #include"TEST2.h"

7 #include

8 using namespace std;

9 using std::cout; using std::endl;

10

11 template

12 T2 my_add(T1 NumA, T2 NumB){

13 return NumA + NumB;

14 }

15

16

17

18 template

19 T MyMax(const T NumA, const T NumB){

20

21 return NumA < NumB ? NumB : NumA;

22 }

23 template

24 const char MyMax[span style="color: rgba(0, 0, 255, 1)">const char>(const char pStrA, const char pStrB){

25 return (strcmp(pStrA, pStrB) < 0) ? pStrB : pStrA;

26

27 }

28

29

30 template[span style="color: rgba(0, 0, 255, 1)">class T>

31 class CVector{

32 public:

33 CVector(int nCount) :m_nSize(nCount){

34 m_pData = new T【nCount】;

35 memset(m_pData, 0, nCount);

36 }

37 ~CVector(){ delete m_pData; }

38 T operator【】(int nIndex){

39 return m_pData【nIndex】;

40 }

41

42 private:

43 T m_pData;

44 int m_nSize;

45 };

46

47 class StackOverfloawExp{//栈满异常类

48 public:

49 StackOverfloawExp(){}

50 ~StackOverfloawExp(){}//代码效果参考:http://www.ezhiqi.com/bx/art_2025.html

51 void getMessage(){

52 cout [ "异常:栈满不能入栈" [ endl;

53 }

54

55 };

56 class StackEmptyExp{//栈空异常类

57 public:

58 StackEmptyExp(){}

59 ~StackEmptyExp(){}

60 void getMessage(){

61 cout [ "异常:栈空不能出战" [ endl;

62

63 }

64 };

65

66 template[span style="color: rgba(0, 0, 255, 1)">class TYPE>

67 class CStack{

68 public :

69 CStack(int nCount){

70 m_pStack = new TYPE【nCount】;

71 memset(m_pStack, 0, nCount);

72 if (!m_pStack) throw StackEmptyExp();

73 m_nLength = nCount;

74 m_nTos = 0;

75 }

76 ~CStack(){ delete【】 m_pStack; }

77 void push(TYPE Data){

78 if (m_nTos == m_nLength) throw StackOverfloawExp();

79 m_pStack【m_nTos++】 = Data;

80 }

81 TYPE pop(){

82 if (!m_nTos) throw StackEmptyExp();

83 return m_pStack【--m_nTos】;

84 }//代码效果参考:http://www.ezhiqi.com/zx/art_3084.html

85

86 private:

87 TYPE m_pStack;

88 int m_nTos, m_nLength;

89 };

90

91

92

93 class CArrayOverflow :public exception{

94 public:

95 CArrayOverflow(int nNum) :exception("数组越界异常!\n"){

96 m_nNum = nNum;

97 }

98 const char what(){//重定义的what()函数

99 cout [ "数组下标" [ m_nNum [ "越界\n";

100 return exception::what();

101 }

102 private:

103 int m_nNum;

104

105 };

106

107 int _tmain(int argc, _TCHAR argv【】)

108 {

109

110 cout [ my_add(1, 3.4) [ endl;

111 cout [ my_add(1.2, 'A') [ endl;

112 cout [ my_add(2, 'A') [ endl;

113 cout [ MyMax("15PB", "A1Pass") [ endl;

114 CVector[span style="color: rgba(0, 0, 255, 1)">int

115 cout [ objNum【1】 [ endl;

116

117

118 CStack[span style="color: rgba(0, 0, 255, 1)">int

119 for (int i = 0; i < 5; i++){

120 try{

121 cout [ obj.pop() [ endl;

122

123 }

124 catch (StackOverfloawExp e){

125 e.getMessage();

126 }

127 catch (StackEmptyExp e){

128 e.getMessage();

129

130 }

131 }

132 system("pause");

133 return 0;

134 }

让数据变得更安全!

相关文章
|
1天前
|
存储 编译器 C++
【C++】详解C++的模板
【C++】详解C++的模板
|
4天前
|
安全 编译器 C++
C++一分钟之-编译时计算:constexpr与模板元编程
【6月更文挑战第28天】在C++中,`constexpr`和模板元编程用于编译时计算,提升性能和类型安全。`constexpr`指示编译器在编译时计算函数或对象,而模板元编程通过模板生成类型依赖代码。常见问题包括误解constexpr函数限制和模板递归深度。解决策略包括理解规则、编写清晰代码、测试验证和适度使用。通过实战示例展示了如何使用`constexpr`计算阶乘和模板元编程计算平方。
27 13
|
4天前
|
存储 算法 编译器
程序与技术分享:C++模板元编程简介
程序与技术分享:C++模板元编程简介
|
5天前
|
SQL 人工智能 算法
技术心得记录:模板函数函数模板FunctionTemplate(C++Primer
技术心得记录:模板函数函数模板FunctionTemplate(C++Primer
|
5天前
|
存储 算法 编译器
程序与技术分享:C++模板元编程学习笔记
程序与技术分享:C++模板元编程学习笔记
|
6天前
|
编译器 C++
【c++】模板进阶
【c++】模板进阶
6 0
|
6天前
|
存储 编译器 C++
C++模板
C++模板
5 0
|
6天前
|
存储 Java 程序员
【C++航海王:追寻罗杰的编程之路】异常——错误处理方式之一
【C++航海王:追寻罗杰的编程之路】异常——错误处理方式之一
10 0
|
6天前
|
编译器 C++
【C++航海王:追寻罗杰的编程之路】关于模板,你知道哪些?
【C++航海王:追寻罗杰的编程之路】关于模板,你知道哪些?
12 0
|
6天前
|
编译器 C++
【C++】学习笔记——模板进阶
【C++】学习笔记——模板进阶
10 0