10 / 0 / 2
Регистрация: 12.10.2015
Сообщений: 62
1

Вывод данных вложенного объекта из другого объекта

06.10.2016, 13:16. Показов 755. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый День! Хочу в одном объекте вывести текст который находится во вложенном объекте.
Помогите ,пожалуйста, понять в чем ошибка.
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>
#include <stdio.h>
#include <direct.h>
 
 
using namespace std;
 
class One
{
private:
    char * text;
 
public:
    One() {
 
        text = new char[strlen("text")+1];
        strcpy(text,"text");
    }
 
    One(char * text) {
        (*this).text = new char[50];
        strcpy((*this).text, text);
        cout << "constructor\n";
    }
 
    ~One() {
        delete[] text;
    };
 
    char * getText() {
        return text;
    }
 
    void showText() {
        cout << "text : " << text << "\n";
    }
};
 
 
class Two {
 
private:
    One one;    
 
public:
    Two() {
        
        cout << "constructor\n";
    }
    Two(One one) {
        (*this).one = one;
    }
 
    ~Two() {
        
        cout << "destructor\n";
    }
 
    One getOne() {
        return (*this).one;
    }
 
    void Show() {
        cout << "Show One Object text :" << (*this).one.getText() << "\n";      
    }
};
 
void main() {
 
    char *text = new char[50];
    cout << "Enter text : "; cin >> text;
    One one(text);
    
 
    Two two(one);
    cout << "Show One Object text :";  two.Show();
    cout << "FINISH : " << "\n"; 
    system("pause"); 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.10.2016, 13:16
Ответы с готовыми решениями:

Передача объекта методу другого объекта другого класса
Всем привет. Есть у меня класс test1, который имеет конструкторы только с параметрами. Другой...

Передача данных объекта одного класса , объекту другого
Доброго времени суток. В общем, столкнулся с проблемой передачи данных от одного класса другому....

Объявление объекта вложенного класса
Есть структура наподобие: template&lt;class T&gt; class A{ //...... public: class B { int dd;...

Обращение к данным другого объекта
В одном из методов класса block необходимо обратиться к полю объекта класса game. Пробую передачу...

3
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
06.10.2016, 14:28 2
Цитата Сообщение от Matanoid Посмотреть сообщение
Помогите ,пожалуйста, понять в чем ошибка.
Для One нужен явный оператор присваивания и конструктор копирования.

Добавлено через 20 минут
Цитата Сообщение от Matanoid Посмотреть сообщение
C++
1
2
3
4
5
One(char * text) {
 (*this).text = new char[50];
strcpy((*this).text, text);
cout << "constructor\n";
}
Лучше так:
C++
1
2
3
4
5
One(char * text) {
        (*this).text = new char[strlen(text) + 1];
        strcpy((*this).text, text);
        cout << "constructor\n";
    }
0
10 / 0 / 2
Регистрация: 12.10.2015
Сообщений: 62
06.10.2016, 16:30  [ТС] 3
Вроде все исправил. Работает.
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>
#include <stdio.h>
#include <direct.h>
 
 
using namespace std;
 
class One
{
private:
    char * text;
 
public:
    One() {
 
        //text = new char[strlen("text")+1];
        text = new char[50];
        strcpy(text,"text");
    }
 
    One(char * text) {
        (*this).text = new char[strlen(text)+1];
        strcpy((*this).text, text);
        cout << "constructor\n";
    }
 
    One(const One &object) {
        (*this).text = new char[strlen(object.text) + 1];
        strcpy((*this).text, object.text);
    }
 
    One& One::operator=(One& object)
    {
        (*this).text = new char[strlen(object.text) + 1];
        strcpy((*this).text, object.text);
        return *this;
    }
 
    ~One() {
        delete[] text;
    };
 
    char * getText() {
        return text;
    }
 
    void showText() {
        cout << "text : " << text << "\n";
    }
};
 
 
class Two {
 
private:
    One one;    
 
public:
    Two() {
        
        cout << "constructor\n";
    }
    Two(One one) {
        (*this).one = one;
    }
 
    ~Two() {
        
        cout << "destructor\n";
    }
 
    One getOne() {
        return (*this).one;
    }
 
    void Show() {
        cout << "Show One Object text :" << (*this).one.getText() << "\n";      
    }
};
 
void main() {
 
    One one1;
    one1.showText();
 
 
    char *text = new char[50];
    cout << "Enter text : "; cin >> text;
    One one(text);
    
 
    Two two(one);
    two.Show();
    cout << "FINISH : " << "\n"; 
    system("pause"); 
}
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
06.10.2016, 16:44 4
Цитата Сообщение от Matanoid Посмотреть сообщение
Работает.
В operator= утечка памяти.
0
06.10.2016, 16:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.10.2016, 16:44
Помогаю со студенческими работами здесь

Передача итератора другого объекта
Имеется класс bigint, в нем объвлен vector&lt;char&gt; и итератор. При попытке перегрузки + bigint...

Объявление в классе объекта другого класса
какая-то фигня получается, допустим есть 2 класса - class1 и class2, в хедерах class1.h подключён...

Как правильно вызывать функцию объекта из другой функции того же объекта?
Доброго дня и ночи, уважаемые программисты! Существует некоторая проблема, на которую я наткнулся,...

Требуется ли при удалении объекта посредством delete указывать тип объекта?
например, есть указателиvoid *p1; void *p2; есть VCL-объект TButton, есть самописный класс...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru