详细解读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++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
95 10
|
3月前
|
编译器 C++
【C++】——初识模板
【C++】——初识模板
【C++】——初识模板
|
4月前
|
程序员 C++
C++模板元编程入门
【7月更文挑战第9天】C++模板元编程是一项强大而复杂的技术,它允许程序员在编译时进行复杂的计算和操作,从而提高了程序的性能和灵活性。然而,模板元编程的复杂性和抽象性也使其难以掌握和应用。通过本文的介绍,希望能够帮助你初步了解C++模板元编程的基本概念和技术要点,为进一步深入学习和应用打下坚实的基础。在实际开发中,合理运用模板元编程技术,可以极大地提升程序的性能和可维护性。
|
1月前
|
编译器 程序员 C++
【C++打怪之路Lv7】-- 模板初阶
【C++打怪之路Lv7】-- 模板初阶
16 1
|
1月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
41 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
1月前
|
算法 编译器 C++
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
79 2
|
1月前
|
存储 编译器 C++
【C++篇】引领C++模板初体验:泛型编程的力量与妙用
【C++篇】引领C++模板初体验:泛型编程的力量与妙用
38 2
|
1月前
|
存储 算法 编译器
【C++】初识C++模板与STL
【C++】初识C++模板与STL
|
1月前
|
编译器 C++
【C++】模板进阶:深入解析模板特化
【C++】模板进阶:深入解析模板特化
|
2月前
|
存储 算法 程序员
C++ 11新特性之可变参数模板
C++ 11新特性之可变参数模板
55 0