Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск

Кто сейчас на форуме
Сейчас посетителей на форуме: 1, из них зарегистрированных: 0, скрытых: 0 и гостей: 1

Нет

[ Посмотреть весь список ]


Больше всего посетителей (7) здесь было Сб Июн 17, 2017 3:57 pm
Самые активные пользователи за неделю


домашнее задание №3

Предыдущая тема Следующая тема Перейти вниз

домашнее задание №3

Сообщение автор Pryanik в Пт Июл 28, 2017 1:56 am

Ярослав,здравствуй!
У меня не получается сделать сложение с динамическим массивом, программа
падает с ошибкой. На экран всё выводит, а потом грузит грузит и ошибка.
Останавливается на конструкторе при выделении памяти. С простым массивом всё работает.
#define _CRT_SECURE_NO_WARNINGS
#include "String.h"
#include <cstring>
#include <iostream>

using namespace std;

String::String(const char *str){
strcpy(string, str);
//stringP = new char(strlen(str) + 1);
//strcpy(stringP,str);
}

String::String(const String &from){
strcpy(string, from.string);
//stringP = new char(strlen(from.string) + 1);
//strcpy(stringP, from.string);
}

String String::operator + (String str){
String suming;
//stringP = new char(strlen(str.stringP) strlen(stringP) + 1);
//strcpy(suming.stringP, stringP);
//strcat(suming.stringP, str.stringP);
strcpy(suming.string, string);
strcat(suming.string, str.string);
return suming;
}

void String::print(){
cout << string << endl;
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++
#pragma once

class String {
char string[100];
//char *stringP;
public:
String() :/*stringP(nullptr),*/ string("") {};
String(const char *str);
String(const String &from);
String operator + (String str) ;
void print();
++++++++++++++++++++++++++++++++++++++++++++++++++
#include "String.h"
#include <iostream>

using namespace std;

int main() {
String string1("Error");
String string2 = "from";

string1.print();
string2.print();

String strSum = string1 + string2;
strSum.print();
return 0;
}
+++++++++++++++++++++++++++++++++++++++++++++++++++

Pryanik

Posts : 4
Join date : 2017-02-24

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: домашнее задание №3

Сообщение автор Ярослав в Сб Авг 12, 2017 4:07 pm

Дело в этом фрагменте кода:

Код:
String String::operator + (String str) {
  String suming;
  stringP = new char(strlen(str.stringP) + strlen(stringP) + 1);
  strcpy(suming.stringP, stringP);
  strcat(suming.stringP, str.stringP);
  //strcpy(suming.string, string);
  //strcat(suming.string, str.string);
  return suming;
}

По идее, мы создаём новый объект (suming), заполняем его, чтобы он был суммой строк this + str, и возвращаем его. Тогда должно быть так:
Код:
suming.stringP = new char[...];
strcpy (suming.stringP, ...);
strcat (suming.stringP, ...);
1) Результат выделения новой строки сохраняем в suming.stringP
2) Выделять надо массив char-ов, для этого используем квадратные скобки. Круглые скобки будут означать совсем другое: выделить памяти под один символ; для этого символа вызвать конструктор с таким значением.

Замечание 2) относится и к конструкторам класса String.
avatar
Ярослав
Admin

Posts : 346
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения