#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");
}
C/C++
Параметр со значением по умолчанию обычно не используют в конструкторе, если он единственный. К тому же нулевой указатель требует проверки, чтобы не закрашить оператор delete[] и строчные функции strlen() и strcpy().
В С++ в качестве нулевого указателя используют макрос nullptr а не NULL.
С++, классы, конструктор
Что не так?
String(const char* sum = NULL) {}
Пустые фигурные скобки означают дефолтную реализацию. Далее компилятор видит еще одну реализацию вынесенную отдельно, и не понимает какую же использовать.Параметр со значением по умолчанию обычно не используют в конструкторе, если он единственный. К тому же нулевой указатель требует проверки, чтобы не закрашить оператор delete[] и строчные функции strlen() и strcpy().
В С++ в качестве нулевого указателя используют макрос nullptr а не NULL.
#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();
}
#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 строки ошибки не было, всё бы запустилось
Похожие вопросы
- Создать простой класс, конструктор, и несколько функций. Не могу решить задачу, плохо понял тему, помогите пожалуйста.
- Написать программу на C++.Создать класс vector3d, задаваемый тройкой координат. Создать конструктор...
- В QtCreator для Qt 4.8 (и 5 может также), у класса формы главной, функция конструктор, делает не понятное наследование?
- Программирование, динамическое выделение памяти в конструкторе класса
- Компилятор ворует rvalue конструктор!
- Что сложного в этом вашем Си плюс плюсе? Классы, объекты, конструкторы, наследование, полиморфизм?
- Конструкторы копий С++
- C++: в чем хоть какая-то польза от инициализаторов (которые через двоеточие в конструкторе класса)?
- Как Создать иерархическую систему классов, на примере этого задания? Второй день уже туплю, помогите пожалуйста... С++
- Класс Poll и класс Variant (тема инкапсуляция) C++