C/C++

С++, классы, конструктор

Что не так?
 #include  
#include

using namespace std;

class String {
private:
char* sum1;
int summer;
public:

String(const char* sum = NULL) {}
~String() {
delete[] sum1;
}
};

String::String(const char* sum) {
summer = strlen(sum);
sum1 = new char[summer + 1];
strcpy(sum1, sum);
}


int main()
{
String p("Tommi");
}
 String(const char* sum = NULL) {}  
Пустые фигурные скобки означают дефолтную реализацию. Далее компилятор видит еще одну реализацию вынесенную отдельно, и не понимает какую же использовать.
Параметр со значением по умолчанию обычно не используют в конструкторе, если он единственный. К тому же нулевой указатель требует проверки, чтобы не закрашить оператор delete[] и строчные функции strlen() и strcpy().
В С++ в качестве нулевого указателя используют макрос nullptr а не NULL.
Андрей Тютюнник
Андрей Тютюнник
51 416
Лучший ответ
#include <iostream>
#include <cstring>

using namespace std;

class String {
private:
char *sum1;
int summer;

public:
String(){ sum1 = NULL; }
String( const char *sum );
~String() {
if(sum1 != NULL) {
delete[] sum1;
sum1 = NULL; // старые привычки, точно проблем так не будет если далее код даже завалится :)
}
}

void Print() {
if( sum1 != NULL )
std::cout << sum1 << endl;
}

void SetSum( const char *sum );
};

String::String( const char *sum ){
summer = strlen(sum);
sum1 = new char[summer + 1];
strcpy(sum1, sum);
}


void String::SetSum( const char *sum ){
// удаляем
if(sum1 != NULL) {
summer = 0;
delete[] sum1;
sum1 = NULL; // старые привычки, точно проблем так не будет если далее код даже завалится :)
}
// потом копируем
summer = strlen(sum);
sum1 = new char[summer + 1];
strcpy(sum1, sum);
}

int main()
{
String p1; // тут конструктор по умолчанию
String p2("123"); // тут с параметром
p1.Print();
p2.Print();
p2.SetSum("456");
p2.Print();
}
Ролан Бейсембаев С чего вдруг код не верный, конструктор описан, тем уж более, код писал не я, а скопирован с сайта, где проверено
Ролан Бейсембаев А про 19 строку я молчу, ведь если 21 строки ошибки не было, всё бы запустилось

Похожие вопросы