详细解读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 }

让数据变得更安全!

相关文章
|
2月前
|
编译器 C++
【C++】——初识模板
【C++】——初识模板
32 1
【C++】——初识模板
|
3月前
|
程序员 C++
C++模板元编程入门
【7月更文挑战第9天】C++模板元编程是一项强大而复杂的技术,它允许程序员在编译时进行复杂的计算和操作,从而提高了程序的性能和灵活性。然而,模板元编程的复杂性和抽象性也使其难以掌握和应用。通过本文的介绍,希望能够帮助你初步了解C++模板元编程的基本概念和技术要点,为进一步深入学习和应用打下坚实的基础。在实际开发中,合理运用模板元编程技术,可以极大地提升程序的性能和可维护性。
|
4月前
|
安全 编译器 C++
C++一分钟之-编译时计算:constexpr与模板元编程
【6月更文挑战第28天】在C++中,`constexpr`和模板元编程用于编译时计算,提升性能和类型安全。`constexpr`指示编译器在编译时计算函数或对象,而模板元编程通过模板生成类型依赖代码。常见问题包括误解constexpr函数限制和模板递归深度。解决策略包括理解规则、编写清晰代码、测试验证和适度使用。通过实战示例展示了如何使用`constexpr`计算阶乘和模板元编程计算平方。
60 13
|
3月前
|
存储 编译器 C++
【C++】详解C++的模板
【C++】详解C++的模板
|
4天前
|
存储 算法 程序员
C++ 11新特性之可变参数模板
C++ 11新特性之可变参数模板
11 0
|
2月前
|
编译器 C++
【C++】模板初级
【C++】模板初级
|
2月前
|
安全 编译器 C++
【C++】模板进阶
【C++】模板进阶
|
2月前
|
并行计算 测试技术 开发工具
【简历模板】c/c++软件工程师
【简历模板】c/c++软件工程师
49 0
|
3月前
|
C++
C++ 异常机制问题之捕获异常的问题如何解决
C++ 异常机制问题之捕获异常的问题如何解决
|
3月前
|
安全 编译器 C++
C++一分钟之-模板元编程实例:类型 traits
【7月更文挑战第15天】C++的模板元编程利用编译时计算提升性能,类型traits是其中的关键,用于查询和修改类型信息。文章探讨了如何使用和避免过度复杂化、误用模板特化及依赖特定编译器的问题。示例展示了`is_same`类型trait的实现,用于检查类型相等。通过`add_pointer`和`remove_reference`等traits,可以构建更复杂的类型转换逻辑。类型traits增强了代码效率和安全性,是深入C++编程的必备工具。
54 11