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

Создание класса-агрегата объектов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Напишите программу обхода двоичных деревьев во внутреннем порядке http://www.cyberforum.ru/cpp-beginners/thread1155180.html
Помогите найти ошибку в коде. Задание: Напишите программу обхода двоичных деревьев во внутреннем порядке. #include<iostream> #include <cstdlib> using namespace std; //Создание упорядоченного двоичного дерева struct tree { char info; struct tree *left; struct tree *right;
C++ Вектор структур, в которых также векторы. Ошибка переполнения вектора Как реализовать такое дело: Есть структура MyStruct1 struct MyStruct1{ std::vector<MyStruct2> myStruct2; }; В которой вектор структур MyStruct2. struct MyStruct2{ http://www.cyberforum.ru/cpp-beginners/thread1155175.html
Напечатать все слова строки, которые начинаются цифрой C++
Привет. Нужна помощь: Задана строка. Необходимо напечатать все слова строки, которые начинаются цифрой и подсчитать их количество.
C++ Программой для вычисления математических выражений
Задача 1. Написать программу, которая вычисляет значение выражения, и определить ее значение для введенного пользователем значений фактических параметров. Создать функции пользователей-для ввода данных, вычисления значений выражения, вывода данных. При этом найти область определения функций и забезпечпты необходимую реакцию программы на некорректные ситуации.
C++ Блок-схема к программе http://www.cyberforum.ru/cpp-beginners/thread1155165.html
нужна блок схема к программе: #include <iostream> #include <conio.h> #include <string> using namespace std; struct toy { string name;//імя float cost;//вартість
C++ Функция анализа фойлов Есть такая таблица номеров автономных систем, нужна функция которая будет проводить анализ этих номеров и показывать как они связаны друг с другом. подробнее

Показать сообщение отдельно
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
24.04.2014, 00:38     Создание класса-агрегата объектов
Есть класс TString являющийся агрегатом объектов класса TSymb
Как написать конструктор TString при этом по его параметру-входной строке надо создать и экземпляры TSymb[i]
и обойтись без всяких vector а с динамическим массивом TSymb.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class TSymb 
{...}
class TString//объект «строка»- массив из 15 симв, умеющий выводить на печать зн своих элем 
{ private:   
  TSymb **smb; 
  public:
     int n;//кол-во
     TString(char *ref);
     ~TString(void);
         void setC(char c);
};
 
TString::TString(char *ref)
{  char c;
    n=strlen(ref);  
   *smb=new TSymb[n];
 for (int i=0;i<n;i++){
   c=ref[i];
   smb[i]=new TSymb(c);
                       }
}
void TSymb::setC(char c)
{ch=c;}
В клвсс TSymb добавлен конструктор по умолчанию - пустой. По синтаксису код проходит, но валится на
*smb=new TSymb [n]; надо как-то в нем перейти к указателям TSymb??

Добавлено через 46 минут
Естественно удаление оператора *smb=new TSymb[n]; даст ошибку памяти ниже на
smb[i]=new TSymb(c);

Добавлено через 9 часов 12 минут
Все.Наконец получилось агрегирование по значениям (композиция).
Единственный вариант при композиции –выделять память для n объектов TSymb с помощью
smb=new TSymb [n]; при этом неявно вызывается конструктор без параметров. TSymb() который надо добавить в класс TSymb.Вариант использования с new конструктора с параметрами не проходит. Чтобы все таки после создания объектов конструктором без парамеров установить нужные значения символа, добавим метод обновления void setC(char c); класс TSymb
C++
1
2
3
4
5
6
7
8
9
10
11
TString::TString(char *ref)
{  char c;
    n=strlen(ref);  
    smb=new TSymb [n];
    for (int i=0;i<n;i++)
     {c=ref[i]; smb[i].setC(c);}
}
TString::~TString(void) 
 {   for(int i=0;i<n;i++)
       smb[i].~TSymb();
 }
2 способ (агрегирование по ссылкам-наполнение)
Здесь удобно использовать vector из STL
C++
1
2
3
4
5
6
7
8
9
10
TString::TString(char *ref)
{  char c;
    n=strlen(ref);
    for (int i=0;i<n;i++){
     c=ref[i];
     str.push_back(TSymb(c));
    }
}
TString::~TString() 
{  str.clear();}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru