1:运算符重载
1 RMB.h 2 #ifndef RMB_H 3 #define RMB_H 4 5 #include <bits/stdc++.h> 6 using namespace std; 7 class RMB 8 { 9 public: 10 RMB(); 11 RMB(int, int); 12 virtual ~RMB(); 13 void display() 14 { 15 cout << "RMB:" << yuan << "."; 16 if(jf < 10) 17 { 18 cout << "0"; 19 } 20 cout << jf << endl; 21 } 22 friend RMB operator+(const RMB&, const RMB&);//作为友元函数的元素符重载 23 friend bool operator>(const RMB&, const RMB&); 24 int Getjf() { return jf; } 25 void Setjf(int val) { jf = val; } 26 int Getyuan() { return yuan; } 27 void Setyuan(int val) { yuan = val; } 28 RMB operator+(const RMB& s)//作为成员函数的运算符重载 29 { 30 int c = this->jf + s.jf; 31 int d = this->yuan + s.yuan; 32 return RMB(c,d); 33 } 34 protected: 35 36 private: 37 int jf; 38 int yuan; 39 }; 40 41 #endif // RMB_H 42 RMB.cpp 43 /* 44 * 文件名: 45 * 描 述: 46 * 作 者: 47 * 时 间: 48 * 版 权: 49 */#include "RMB.h" 50 #include <bits/stdc++.h> 51 using namespace std; 52 RMB::RMB() 53 { 54 cout << "RMB construction" << endl; 55 } 56 RMB::RMB(int _yuan, int _jf):yuan(_yuan),jf(_jf) 57 { 58 cout << "RMB(int, int) construction" << endl; 59 } 60 RMB::~RMB() 61 { 62 cout << "RMB destruction" << endl; 63 } 64 65 RMB operator+(const RMB& val1,const RMB& val2)//重载加运算符 66 { 67 int jf = val1.jf + val2.jf; 68 int yuan = val1.yuan + val2.yuan; 69 if(jf > 99){ 70 yuan++; 71 jf-=100; 72 } 73 return RMB(yuan, jf);//局部对象不可以返回引用 74 } 75 76 bool operator>(const RMB& val1, const RMB& val2)//判断大小 77 { 78 bool ret =false; 79 if(val1.yuan > val2.yuan) 80 { 81 ret = true; 82 }else if(val1.yuan == val2.yuan){ 83 if(val1.jf > val2.jf) 84 { 85 ret = true; 86 } 87 } 88 return ret; 89 } 90 91 main.cpp 92 #include <iostream> 93 #include "RMB.h" 94 using namespace std; 95 96 int main() 97 { 98 99 RMB rmb1(12,13); 100 RMB rmb2(9,9); 101 cout << (rmb1 > rmb2) << endl; 102 RMB rmb3 = rmb1 + rmb2; 103 cout << rmb3.Getyuan() << " " << rmb3.Getjf() << endl; 104 rmb3.display(); 105 return 0; 106 }
可以进行运算符重载的运算符
不可以进行运算符重载的运算符
2:继承
1 Animal.h 2 #ifndef ANIMAL_H 3 #define ANIMAL_H 4 5 #include<bits/stdc++.h> 6 using namespace std; 7 class Animal 8 { 9 public: 10 Animal(); 11 virtual ~Animal(); 12 virtual void bark() 13 { 14 cout << "动物发出叫声" << endl; 15 } 16 unsigned int Getheight()const { return height; } 17 void Setheight(unsigned int val) { height = val; } 18 19 protected: 20 21 private: 22 unsigned int height; 23 }; 24 class dog:public Animal//单继承 25 { 26 public: 27 dog(){}; 28 dog(unsigned int height,unsigned int weight):weight(weight) 29 { 30 Setheight(height); 31 // height = height; 32 //weight = weight; 33 } 34 unsigned int getWeight()const 35 { 36 return weight; 37 } 38 void setWeight(int w){ 39 weight = w; 40 } 41 virtual void bark() 42 { 43 cout << "狗儿汪汪叫" << endl; 44 } 45 private: 46 unsigned int weight; 47 }; 48 class littleDog : public Animal,public dog//多继承 49 { 50 public: 51 littleDog(unsigned int height,unsigned int weight) 52 { 53 setWeight(weight); 54 } 55 private: 56 57 }; 58 #endif // ANIMAL_H 59 Animal.cpp 60 /* 61 * 文件名: 62 * 描 述: 63 * 作 者: 64 * 时 间: 65 * 版 权: 66 */#include "Animal.h" 67 68 Animal::Animal() 69 { 70 //ctor 71 } 72 73 Animal::~Animal() 74 { 75 //dtor 76 } 77 main.cpp 78 #include <iostream> 79 80 using namespace std; 81 #include <Animal.h> 82 int main() 83 { 84 dog d(70,70); 85 d.bark();//虚函数,重写父类版本 86 d.Animal::bark();//强制调用father中定义的版本 87 cout << d.Getheight() << d.getWeight() << endl; 88 //d.dogbark(); 89 littleDog ld(12,12); 90 cout << ld.getWeight() << endl; 91 return 0; 92 }
3:多态
4:类模版
1 #include<bits/stdc++.h> 2 using namespace std; 3 template <class T> 4 class Stack 5 { 6 public: 7 Stack():top(0) 8 { 9 array[top] = 0; 10 } 11 void push(const T&i); 12 T pop(); 13 private: 14 enum{SIZE = 100}; 15 T array[SIZE]; 16 int top; 17 }; 18 template<typename T> 19 void Stack<T>::push(const T& val) 20 { 21 if(top < SIZE){ 22 array[top++] = val; 23 } 24 } 25 template<typename T> 26 T Stack<T>::pop() 27 { 28 if(top > 0) 29 return array[--top]; 30 else array[0]; 31 } 32 int main() 33 { 34 Stack<int> a; 35 a.push(1); 36 a.push(3); 37 a.push(2); 38 cout << a.pop() << endl; 39 cout << a.pop() << endl; 40 cout << a.pop() << endl; 41 }
提高了代码的复用性