Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 05.11.2012
Сообщений: 26
1

this(Всегда ли вызывается конструктор при не явной передачи объекта в конструктор)

22.12.2012, 19:11. Просмотров 1028. Ответов 7
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
class Test
{
    int i;
    public:
        void test(int i)
        {
            this -> i = i;
        }
};
Конструктор Test::Test всегда вызывается при неявной передаче объекта в test?

Добавлено через 7 минут
И передается ли этот неявный объект в таком случае:
C++
1
2
3
4
5
6
7
8
9
class Test
{
    int i;
    public:
        void test(Test *t,int i)
        {
            t -> i = i;
        }
};
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2012, 19:11
Ответы с готовыми решениями:

Какой конструктор вызывается при value initialization объекта?
Привет, есть вот такой код, например: #include <iostream> struct Test { int data; ...

Почему конструктор вызывается при присвоении объекта другому объекту
оператор+ выполняется нормально, но когда уже переменная в sum, на след шаге она вызывает...

Почему не вызывается конструктор копирования при возврате объекта из функции
Добрый день! Насколько мне известно, конструктор копирования вызывается: 1) при передачи...

Почему при помещении объекта в list вызывается конструктор и деструктор?
Нужна помощь опытного программиста. Не могу понять почему при помещение объекта в list вызывается...

7
Делаю внезапно и красиво
Эксперт С++
1309 / 1224 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
22.12.2012, 19:34 2
1. void test(Test * this, int i)

2. void test(Test * this, Test *t,int i)

Цитата Сообщение от linq Посмотреть сообщение
Конструктор Test::Test всегда вызывается при неявной передаче объекта в test?
У этого класса нет конструктора, принимающего параметры.
1
Jesus loves me
Эксперт С++
5096 / 3110 / 351
Регистрация: 12.12.2009
Сообщений: 7,863
Записей в блоге: 2
22.12.2012, 21:07 3
Цитата Сообщение от Deviaphan Посмотреть сообщение
1. void test(Test * this, int i)
2. void test(Test * this, Test *t,int i)
так на самом деле выглядят методы на уровне ассемблера. Это и хотел сказать Deviaphan.

Не по теме:

не думаю, что это было понятно интуитивно :)

0
1 / 1 / 0
Регистрация: 05.11.2012
Сообщений: 26
22.12.2012, 21:49  [ТС] 4
Спасибо за ответы.
0
3200 / 2012 / 345
Регистрация: 24.11.2012
Сообщений: 4,839
23.12.2012, 05:12 5
Цитата Сообщение от Deviaphan Посмотреть сообщение
1. void test(Test * this, int i)
Точнее
void test(Test * const this, int i)
1
Делаю внезапно и красиво
Эксперт С++
1309 / 1224 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
23.12.2012, 06:52 6
Цитата Сообщение от 0x10 Посмотреть сообщение
Точнее
void test(Test * const this, int i)
this не может быть константным, потому что this->i = i; Константным он будет только в константных методах.


Цитата Сообщение от Kastaneda Посмотреть сообщение
так на самом деле выглядят методы на уровне ассемблера.
Именно это я и имел в виду.
Но чисто условно, потому что на самом деле this передаётся через регистр, а не через стэк.
0
3200 / 2012 / 345
Регистрация: 24.11.2012
Сообщений: 4,839
23.12.2012, 07:16 7
Deviaphan,
В константных методах будет константный указатель на константу.
const Test* const this
или
Test const* const this

Добавлено через 15 минут
Upd: выше я говорил о константности указателя, а не данных. Т.е. this не может быть lvalue, а поэтому должен быть константным указателем.
2
Делаю внезапно и красиво
Эксперт С++
1309 / 1224 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
23.12.2012, 08:02 8
Цитата Сообщение от 0x10 Посмотреть сообщение
выше я говорил о константности указателя, а не данных.
НЕ обратил внимания на положение звёздочки. После конца света со мной так бывает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2012, 08:02

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

При создании класса конструктор вызывается 2 раза, затем вызывается деструктор о_О
Вот такой кодclass A { public: A(){} virtual ~A(){} }; class C { public:

В какой момент вызывается конструктор для глобального объекта, использующего статическое выделение памяти?
В какой момент вызывается конструктор для глобального объекта, использующего статическое выделение...

Будет ли утрачена память, когда конструктор копирования вызывается для уже существующего объекта класса?
class A { char * v; A(); ~A(); A(const A &obj); } ///////////////////// A::A() {

Зачем вызывается конструктор при объявлении указателя на класс
Не знаю, правильно или нет назвал тему... Вот такая ситуация понятна: int * pHeap = new int;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.