Ключевое слово this с++

120
30 апреля 2021, 23:50
Myclass(const Myclass& other)
{
    this->Size = other.Size;
    this->arr = new int[other.Size];
    for (int i = 0; i < other.Size; i++)
    {
        this->arr[i] = other.arr[i];
    }
}

Возник такой вопрос. В коде реализуется конструктор копирования обьекта . 1) Я не совсем понимаю обязательно ли всё время писать this-> как в 4, 6 и 10 строках.2)Почему после того, как мы в 4 строке присвоили в Size значение Size из копируемого обьекта, мы не пишем в 6 и 8 строках просто Size, вместо other.Size ?

Answer 1

Не обязательно. Если нет другого имени, например, локальной переменной, которая может скрыть переменные объекта класса, типа

Myclass(const Myclass& other)
{
    int Size = 2;
    this->Size = other.Size;  // Тут обязательно из-за наличия int Size выше
    this->arr = new int[other.Size];  // Тут не обязательно

По второму вопросу - пишите как хотите. Например

int f(int x)
{
    int a = 2;
    int b = a;
    return x*a;
}

нет же никаких правил, писать x*a или x*b? :) Так и здесь - раз это одно и то же значение - используйте, как хотите...

Я бы даже писал так:

arr = new int[Size = other.Size];

Впрочем, соврал. Потому что раз это конструктор, я бы писал

Myclass(const Myclass& other):Size(other.Size),arr(new int[other.Size])
{
    for (int i = 0; i < other.Size; i++)
    {
        this->arr[i] = other.arr[i];
    }
}
READ ALSO
Как подключить библиотеку sfeMovie?

Как подключить библиотеку sfeMovie?

Я хочу подключить библиотеку sfeMovie (для отображения видео) к проектуДелаю всё по инструкции: http://sfemovie

108
Наследование абстрактного класса

Наследование абстрактного класса

У меня есть некий абстрактный класс, назовем его AbstrУ него есть чисто виртуальная функция, что выводит на экран принятый указатель (разыменовывает...

103
JQuery и одинаковые имена

JQuery и одинаковые имена

У меня есть 6 штук блоков, каждые называются одинаково, только значения в теге <b>12</b> разные

122
Рендеринг HTML-элементов с помощью perspective?

Рендеринг HTML-элементов с помощью perspective?

Цель состоит в том, чтобы визуализировать элементы HTML в перспективе, как в примерах ниже

124