Рубрики

Вывод программы C ++ | Набор 17

Предсказать вывод следующих программ на C ++.

Вопрос 1

#include <iostream>

using namespace std;

  

class A

{

    public:

    A& operator=(const A&a)

    {

        cout << "A's assignment operator called" << endl;

        return *this;

    }

};

  

class B

{

    A a[2];

};

  

int main()

{

    B b1, b2;

    b1 = b2;

    return 0;

}

Выход:

A's assignment operator called
A's assignment operator called

Класс B не имеет определенного пользователем оператора присваивания. Если мы не напишем наш собственный оператор присваивания, компилятор создаст оператор присваивания по умолчанию. Оператор присваивания по умолчанию один за другим копирует все элементы правостороннего объекта в левосторонний объект. Класс B имеет 2 члена класса A. Они оба копируются в операторе «b1 = b2», поэтому существует два вызова оператора присваивания.

вопрос 2

#include<stdlib.h>
#include<iostream>

  

using namespace std;

  

class Test {

public:

    void* operator new(size_t size);

    void operator delete(void*);

    Test() { cout<<"\n Constructor called"; }

    ~Test() { cout<<"\n Destructor called"; }

};

  

void* Test::operator new(size_t size)

{

    cout<<"\n new called";

    void *storage = malloc(size);

    return storage;

}

  

void Test::operator delete(void *p )

{

    cout<<"\n delete called";

    free(p);

}

  

int main()

{

    Test *m = new Test();

    delete m;

    return 0;

}

 new called
 Constructor called
 Destructor called
 delete called

Давайте посмотрим, что произойдет, когда будет выполнено следующее утверждение.

    Test *x = new Test; 

Когда мы используем новое ключевое слово для динамического выделения памяти, происходят две вещи: выделение памяти и вызов конструктора. Распределение памяти происходит с помощью оператора new. В вышеприведенной программе есть пользовательский оператор new, поэтому сначала вызывается пользовательский оператор new, затем конструктор.
Процесс разрушения противоположен. Сначала вызывается деструктор, затем память освобождается.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Вывод программы C ++ | Набор 17

0.00 (0%) 0 votes