Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

Ссылка на временный объект - C++
Наткнулся тут в гугле на одну интересную тему. Как известно, данный код не соответствует стандарту, и не будет скомпилирован многими...

Временный объект и конструктор копирования - C++
Добрый день! Столкнулся c задачкой в тесте: class A{ public: A(){ cout<<"A()"<<endl; } A(const A& a){ ...

Возвращение const ссылки на временный объект - C++
Добрый вечер, #include <iostream> using namespace std; struct Point { int _x; int _y; };

Временный _getch() - C++
Всем доброго времени суток, хочу спросить, как можно сделать временный _getch(), тоесть если в течении определённого времени не была нажата...

Может ли объект-член, или объект-элемент достучаться к содержащему его? - C++
Предположим, class A { ... }; class B { .... A a; ... };

интерфейс, в методе которого создается объект типа IDictionary и возвращается ссылка на этот объект - C++
Привет всем. Необходимо реализовать интерфейс, в методе которого создается объект типа IDictionary и возвращается ссылка на этот объект. Не...

14
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
04.01.2013, 02:02 #2
Цитата Сообщение от Valli1 Посмотреть сообщение
Затем присвоить временный объект вызвавшему(представленному через this) функцию объекту.
Т.е.
Цитата Сообщение от Valli1 Посмотреть сообщение
Как его передать если он не имеет ни "флага не родины"?
это даже сложно читать не то чтоб понять, зачем же все так усложнять?
опишите подробонее чего вы хотите и для чего
0
kravam
быдлокодер
1701 / 888 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
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;
}
0
Valli1
4 / 4 / 0
Регистрация: 14.09.2012
Сообщений: 64
04.01.2013, 02:22  [ТС] #4
Это из задачи:Для функции получите данные, передайте их конструктору, для создания временного объекта и присвойте временный объект вызвавшему, представленному, через *this.
0
kravam
быдлокодер
1701 / 888 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
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;
}
1
Valli1
4 / 4 / 0
Регистрация: 14.09.2012
Сообщений: 64
04.01.2013, 04:00  [ТС] #6
Спасибо. Т.е. "данные" поступают в аргумент функции, а оттуда в конструктор который расположен внутри определения ф-ции. Из-за формы записи конструктора без дескриптора, внутри ф-ции создается временная переменная и присваивается *this?
0
kravam
быдлокодер
1701 / 888 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
04.01.2013, 05:23 #7
Цитата Сообщение от Valli1 Посмотреть сообщение
конструктор который расположен внутри определения ф-ции.
Так говорит нельзя, внутри функции расположен ВЫЗОВ конструктора

Цитата Сообщение от Valli1 Посмотреть сообщение
внутри ф-ции создается временная переменная и присваивается *this?
, да так; создаётся временный объект; а что за дескриптор я так и не понял.
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,355
Записей в блоге: 2
Завершенные тесты: 1
04.01.2013, 10:24 #8
Временный объект создается просто
C++
1
obj1 = obj1.funct(Class1());
0
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
}
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.01.2013, 21:16 #10
Цитата Сообщение от Valli1 Посмотреть сообщение
Требуется создать при помощи конструктора временный объект. Затем присвоить временный объект вызвавшему(представленному через this) функцию объекту.
Просто объявляй объект, он будет создан конструктором, а когда надо присвоить, присваивай, слева пиши
C++
1
*this
. В чём сложность? Можно и прямо присваивать поля вызвавшего объекта.
0
Valli1
4 / 4 / 0
Регистрация: 14.09.2012
Сообщений: 64
05.01.2013, 21:24  [ТС] #11
А, что не правильно написано???? Почему ошибку выдает?
0
kravam
быдлокодер
1701 / 888 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
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;
}
1
Valli1
4 / 4 / 0
Регистрация: 14.09.2012
Сообщений: 64
06.01.2013, 02:13  [ТС] #13
синтаксическая ошибка )
синтаксическая ошибка перед char требуется ")"
бинарный "= "не найден оператор, принимающий правый операнд int
Все в определении setgolf();
конструкторы не разрешены для возвращаемого типа. это в определении конструктора по умолчанию.
0
kravam
быдлокодер
1701 / 888 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
06.01.2013, 02:16 #14
код выше компилится?
0
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 минут
Спасибо большое.
0
06.01.2013, 03:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2013, 03:07
Привет! Вот еще темы с ответами:

Основы: указатель на объект или объект, что выбрать? - C++
Не до конца понимаю (или вообще не понимаю) когда лучше использовать указатель на объект, а когда объект. Например: // есть класс ...

компилятор считает объект l-value, но объект таковым не является - C++
итак есть базовый абстрактный класс Дерево, есть два его наследника Плодовое Дерево и Лесное Дерево. Также существует класс Контейнер...

Указатель объект на объект (фикс ошибки) - C++
/*Есть некий объект ObjectOne который содержит в private: такую строку*/ ObjectTwo *obj = new ObjectTwo(); /*При выводе на экран...

при вызове конструктора присваивания надо возвращать ссыль на объект или сам объект. Смысл? Значения нужных полей меняютмся и без этого! - C++
Друзья! Обнаружил пробел в знаниях. Собсно, вопрос в теме. Дополню лишь: поля объекта меняются на нужные значения и безо всякого возврата...


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

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

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