Форум программистов, компьютерный форум CyberForum.ru

Временный объект - C++

Восстановить пароль Регистрация
 
Valli1
4 / 4 / 0
Регистрация: 14.09.2012
Сообщений: 64
04.01.2013, 01:37     Временный объект #1
Требуется создать при помощи конструктора временный объект. Затем присвоить временный объект вызвавшему(представленному через this) функцию объекту.
Т.е.
C++
1
2
Class1 &Class1::funct(Class1 &v_o){
return (*this=v_o);}
C++
1
obj1=obj1.funct(vremenny_obj.)
Как его передать если он не имеет ни "флага не родины"? Можно конструктор как аргумент в функции?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2013, 01:37     Временный объект
Посмотрите здесь:

при вызове конструктора присваивания надо возвращать ссыль на объект или сам объект. Смысл? Значения нужных полей меняютмся и без этого! C++
интерфейс, в методе которого создается объект типа IDictionary и возвращается ссылка на этот объект C++
Почему допустимо создавать объект по другому объекту, но нельзя присваивать уже созданный объект, другому созданному объекту? C++
компилятор считает объект l-value, но объект таковым не является C++
Временный _getch() C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
04.01.2013, 02:02     Временный объект #2
Цитата Сообщение от Valli1 Посмотреть сообщение
Затем присвоить временный объект вызвавшему(представленному через this) функцию объекту.
Т.е.
Цитата Сообщение от Valli1 Посмотреть сообщение
Как его передать если он не имеет ни "флага не родины"?
это даже сложно читать не то чтоб понять, зачем же все так усложнять?
опишите подробонее чего вы хотите и для чего
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
04.01.2013, 02:05     Временный объект #3
А я попробую угадать...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
class kl {
 public:
 kl () {
 }
 
 kl f () {
  *this= kl ();
 }
 
};
 
////////////////////////////////////////////////
 
int main () {
 kl k;
 k.f();
 getchar ();
 return 0;
}
Valli1
4 / 4 / 0
Регистрация: 14.09.2012
Сообщений: 64
04.01.2013, 02:22  [ТС]     Временный объект #4
Это из задачи:Для функции получите данные, передайте их конструктору, для создания временного объекта и присвойте временный объект вызвавшему, представленному, через *this.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
04.01.2013, 03:02     Временный объект #5
Всё понятно, кроме "получите данные", чё за данные-то? Ну предположим какой-нибудь аргумент типа int, тогда:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
class kl {
 public:
 kl (int x) {
 }
 
 kl f (int x) {
  *this= kl (x);
 }
 
};
 
////////////////////////////////////////////////
 
int main () {
 kl k (5);
 k.f(6);
 getchar ();
 return 0;
}
Valli1
4 / 4 / 0
Регистрация: 14.09.2012
Сообщений: 64
04.01.2013, 04:00  [ТС]     Временный объект #6
Спасибо. Т.е. "данные" поступают в аргумент функции, а оттуда в конструктор который расположен внутри определения ф-ции. Из-за формы записи конструктора без дескриптора, внутри ф-ции создается временная переменная и присваивается *this?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
04.01.2013, 05:23     Временный объект #7
Цитата Сообщение от Valli1 Посмотреть сообщение
конструктор который расположен внутри определения ф-ции.
Так говорит нельзя, внутри функции расположен ВЫЗОВ конструктора

Цитата Сообщение от Valli1 Посмотреть сообщение
внутри ф-ции создается временная переменная и присваивается *this?
, да так; создаётся временный объект; а что за дескриптор я так и не понял.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
04.01.2013, 10:24     Временный объект #8
Временный объект создается просто
C++
1
obj1 = obj1.funct(Class1());
Valli1
4 / 4 / 0
Регистрация: 14.09.2012
Сообщений: 64
05.01.2013, 20:51  [ТС]     Временный объект #9
C++
1
2
3
4
5
Golf&Golf::setgolf(char* f,int g)
{
*this =Golf(char* f, int g);
 return *this;
}
Почему здесь выдает ошибку?

Добавлено через 6 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include "golf.h"
Golf::Golf()
{
strcpy(m_f," ");
m_g=0;
}
Golf::Golf(char* f, int g)
{
strncpy(m_f,f,39);
m_g= g;
}
Golf::~Golf()
{
std::cout<<"Good bye"<<'\n';
}
Golf&Golf::setgolf(char* f,int g)
{
*this =Golf(char* f, int g);
 return *this;
}
Добавлено через 33 секунды
C++
1
2
3
4
5
6
7
8
9
10
11
12
class Golf
{
private:
static const int Limit=40;
char m_f[Limit];
int m_g;
public:
Golf();
Golf(char* f,int g);
~Golf();
Golf& setgolf(char* f,int g);
}
Добавлено через 32 секунды
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include "golf.h"
int main()
{
Golf k;
k=k.setgolf("aaaaaaaa",12);
return 0
}
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.01.2013, 21:16     Временный объект #10
Цитата Сообщение от Valli1 Посмотреть сообщение
Требуется создать при помощи конструктора временный объект. Затем присвоить временный объект вызвавшему(представленному через this) функцию объекту.
Просто объявляй объект, он будет создан конструктором, а когда надо присвоить, присваивай, слева пиши
C++
1
*this
. В чём сложность? Можно и прямо присваивать поля вызвавшего объекта.
Valli1
4 / 4 / 0
Регистрация: 14.09.2012
Сообщений: 64
05.01.2013, 21:24  [ТС]     Временный объект #11
А, что не правильно написано???? Почему ошибку выдает?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
06.01.2013, 00:58     Временный объект #12
кто выдаёт, где выдаёт, чё выдаёт...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <string.h>
 
class Golf
{
private:
static const int Limit=40;
char m_f[Limit];
int m_g;
public:
Golf();
Golf(char* f,int g);
~Golf();
Golf& setgolf(char* f,int g);
};
 
Golf::Golf()
{
strcpy(m_f," ");
m_g=0;
}
Golf::Golf(char* f, int g)
{
strncpy(m_f,f,39);
m_g= g;
}
Golf::~Golf()
{
std::cout<<"Good bye"<<'\n';
}
 
Golf&Golf::setgolf(char* f,int g)
{
*this =Golf( f,  g);
 return *this;
}
 
int main()
{
Golf k;
k=k.setgolf((char*)"aaaaaaaa",12);
return 0;
}
Valli1
4 / 4 / 0
Регистрация: 14.09.2012
Сообщений: 64
06.01.2013, 02:13  [ТС]     Временный объект #13
синтаксическая ошибка )
синтаксическая ошибка перед char требуется ")"
бинарный "= "не найден оператор, принимающий правый операнд int
Все в определении setgolf();
конструкторы не разрешены для возвращаемого типа. это в определении конструктора по умолчанию.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
06.01.2013, 02:16     Временный объект #14
код выше компилится?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2013, 03:07     Временный объект
Еще ссылки по теме:

Может ли объект-член, или объект-элемент достучаться к содержащему его? C++
Ссылка на временный объект C++
C++ Создать объект стек и создать объект очередь с перегруженными операциями

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

Или воспользуйтесь поиском по форуму:
Valli1
4 / 4 / 0
Регистрация: 14.09.2012
Сообщений: 64
06.01.2013, 03:07  [ТС]     Временный объект #15
Нет.

Добавлено через 37 минут
Цитата Сообщение от kravam Посмотреть сообщение
кто выдаёт, где выдаёт, чё выдаёт...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <string.h>
 
class Golf
{
private:
static const int Limit=40;
char m_f[Limit];
int m_g;
public:
Golf();
Golf(char* f,int g);
~Golf();
Golf& setgolf(char* f,int g);
};
 
Golf::Golf()
{
strcpy(m_f," ");
m_g=0;
}
Golf::Golf(char* f, int g)
{
strncpy(m_f,f,39);
m_g= g;
}
Golf::~Golf()
{
std::cout<<"Good bye"<<'\n';
}
 
Golf&Golf::setgolf(char* f,int g)
{
*this =Golf( f,  g);
 return *this;
}
 
int main()
{
Golf k;
k=k.setgolf((char*)"aaaaaaaa",12);
return 0;
}
Да Ваш работает. Но почему мой нет?

Добавлено через 7 минут
Спасибо большое.
Yandex
Объявления
06.01.2013, 03:07     Временный объект
Ответ Создать тему
Опции темы

Текущее время: 08:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru