added double jump and sitting state
This commit is contained in:
		
							parent
							
								
									2e5c5a8dde
								
							
						
					
					
						commit
						90d07dde3f
					
				
					 148 changed files with 13050 additions and 0 deletions
				
			
		
							
								
								
									
										74
									
								
								term1/seminar04_templates/08_ref/main.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								term1/seminar04_templates/08_ref/main.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,74 @@ | |||
| #include <iostream> | ||||
| #include <string> | ||||
| #include <vector> | ||||
| 
 | ||||
| using std::cout, std::endl, std::string, std::vector; | ||||
| 
 | ||||
| template <typename T> | ||||
| class Ref { | ||||
| private: | ||||
|         T* mPtr; | ||||
| public: | ||||
|         Ref(T& t) { | ||||
|             mPtr = &t; | ||||
|         } | ||||
|         Ref(Ref& t) { | ||||
|             mPtr = t.mPtr; | ||||
|         } | ||||
|         Ref() { | ||||
|             mPtr = nullptr; | ||||
|         } | ||||
|         T& get() { | ||||
|             return *mPtr; | ||||
|         } | ||||
|         T operator=(const T& t) { | ||||
|             new(mPtr) T{t}; | ||||
|             return *mPtr; | ||||
|         } | ||||
|         T operator+(const T& t) { | ||||
|             return *mPtr + t; | ||||
|         }  | ||||
|         T operator+=(const T& t) { | ||||
|             *mPtr = *mPtr + t; | ||||
|             return *mPtr; | ||||
|         } | ||||
|         T* operator->() { | ||||
|             return mPtr; | ||||
|         } | ||||
|         template <typename U> | ||||
|         friend std::ostream& operator<<(std::ostream& out, Ref<U> r); | ||||
| }; | ||||
| 
 | ||||
| template <typename T> | ||||
| std::ostream& operator<<(std::ostream& out, Ref<T> r) { | ||||
|     out << *(r.mPtr); | ||||
|     return out; | ||||
| } | ||||
| 
 | ||||
| void toUpper(Ref<string> r) { | ||||
|     for(size_t i = 0; i < r->size(); ++i) | ||||
|         r.get()[i] = toupper(r.get()[i]);  | ||||
| } | ||||
| 
 | ||||
| int main() { | ||||
|     int a = 10; | ||||
|     Ref<int> ra = a; | ||||
|     cout << ra << endl; | ||||
| 
 | ||||
|     string s = "Cat"; | ||||
|     Ref<string> rs = s; | ||||
|     rs = "Mouse"; | ||||
|     rs += "Elephant"; | ||||
|     cout << rs << endl; | ||||
|     cout << s << endl; | ||||
| 
 | ||||
|     toUpper(s); | ||||
|     cout << s << endl; | ||||
| 
 | ||||
|     vector<string> animals {"Cat", "Dogs", "Elephants", "Worms"}; | ||||
|     vector<Ref<string>> refs {animals.begin(), animals.end()}; | ||||
| 
 | ||||
|     for (int i = 0; i < refs.size(); ++i) | ||||
|             cout << animals[i] << " "; | ||||
|     cout << endl; | ||||
| } | ||||
		Reference in a new issue