Advertisement
kutuzzzov

Урок 3-2. Указатели

Dec 7th, 2022
837
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.76 KB | None | 0 0
  1. #include <cassert>
  2. #include <string>
  3.  
  4. template <typename T>
  5. bool IsSameObject(T& value1, T& value2) {
  6.     /*Напишите тело функции самостоятельно */
  7.     return &value1 == &value2;
  8. }
  9.  
  10. int main() {
  11.     using namespace std;
  12.  
  13.     const int x = 1;
  14.     const int y = 1;
  15.     // x и y - разные объекты, хоть и имеющие одинаковое значение
  16.     assert(!IsSameObject(x, y));
  17.     // Оба аргумента - один и тот же объект
  18.     assert(IsSameObject(x, x));
  19.  
  20.     const string name1 = "Harry"s;
  21.     const string name1_copy = name1;
  22.     const string name2 = "Ronald"s;
  23.     auto name1_ptr = &name1;
  24.     const string& name1_ref = name1;
  25.  
  26.     assert(!IsSameObject(name1, name2));  // Две строки с разными значениями - разные объекты
  27.     assert(!IsSameObject(name1, name1_copy));  // Строка и её копия - разные объекты
  28.  
  29.     // Оба параметра ссылаются на одну и ту же строку
  30.     assert(IsSameObject(name1, name1));
  31.     assert(IsSameObject(name2, name2));
  32.     assert(IsSameObject(name1_copy, name1_copy));
  33.  
  34.     // Разыменованный указатель на объект и сам объект - один и тот же объект
  35.     assert(IsSameObject(*name1_ptr, name1));
  36.  
  37.     // Переменная и ссылка на неё относятся к одному и тому же объекту
  38.     assert(IsSameObject(name1_ref, name1));
  39.     // Ссылка на объект и разыменованный указатель на объект относятся к одному и тому же объекту
  40.     assert(IsSameObject(name1_ref, *name1_ptr));
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement