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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Valli1
4 / 4 / 0
Регистрация: 14.09.2012
Сообщений: 64
#1

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

04.01.2013, 01:37. Просмотров 741. Ответов 14
Метки нет (Все метки)

Требуется создать при помощи конструктора временный объект. Затем присвоить временный объект вызвавшему(представленному через 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++
Объект C++
при вызове конструктора присваивания надо возвращать ссыль на объект или сам объект. Смысл? Значения нужных полей меняютмся и без этого! C++
Почему допустимо создавать объект по другому объекту, но нельзя присваивать уже созданный объект, другому созданному объекту? C++
компилятор считает объект l-value, но объект таковым не является C++
C++ Что за объект?
Временный _getch() C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6550 / 3970 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
04.01.2013, 02:02     Временный объект #2
Цитата Сообщение от Valli1 Посмотреть сообщение
Затем присвоить временный объект вызвавшему(представленному через this) функцию объекту.
Т.е.
Цитата Сообщение от Valli1 Посмотреть сообщение
Как его передать если он не имеет ни "флага не родины"?
это даже сложно читать не то чтоб понять, зачем же все так усложнять?
опишите подробонее чего вы хотите и для чего
kravam
быдлокодер
1690 / 877 / 44
Регистрация: 04.06.2008
Сообщений: 5,395
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
быдлокодер
1690 / 877 / 44
Регистрация: 04.06.2008
Сообщений: 5,395
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
быдлокодер
1690 / 877 / 44
Регистрация: 04.06.2008
Сообщений: 5,395
04.01.2013, 05:23     Временный объект #7
Цитата Сообщение от Valli1 Посмотреть сообщение
конструктор который расположен внутри определения ф-ции.
Так говорит нельзя, внутри функции расположен ВЫЗОВ конструктора

Цитата Сообщение от Valli1 Посмотреть сообщение
внутри ф-ции создается временная переменная и присваивается *this?
, да так; создаётся временный объект; а что за дескриптор я так и не понял.
Kastaneda
Форумчанин
Эксперт С++
4470 / 2832 / 224
Регистрация: 12.12.2009
Сообщений: 7,202
Записей в блоге: 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
Ушёл с форума.
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
быдлокодер
1690 / 877 / 44
Регистрация: 04.06.2008
Сообщений: 5,395
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
быдлокодер
1690 / 877 / 44
Регистрация: 04.06.2008
Сообщений: 5,395
06.01.2013, 02:16     Временный объект #14
код выше компилится?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2013, 03:07     Временный объект
Еще ссылки по теме:

Ссылка на временный объект C++
C++ Создать объект стек и создать объект очередь с перегруженными операциями
C++ Временный объект и конструктор копирования
Возвращение const ссылки на временный объект 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     Временный объект
Ответ Создать тему
Опции темы

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