Написать конструктор копирования
Нужно написать конструктор копирования для класса, чтоб правильно присваивались значения в основной части кода
int main()
{
Str a = Str();
char *z = "abc"; //здесь компилятор ругается на указатель, не хочет ему ничего присваивать, делаю константой - не работает копирование
Str b = Str(z);
Str c(10);
return 0;}
Класс содержит только строку str Моя попытка написать конструктор:
class Str
{
char *str;
public:
Str()
{
*str = '---';
};
Str(char* str)
{
this->str = str;
}
~Str() {
}
Str(const Str & ref_str)
{
str = ref_str.str;
}
};
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Всё отлично работает с полем типа const char *: конструктор без аргументов, конструктор от const char *, конструктор копирования (его создаёт компилятор):
#include <iostream>
class Str
{
private:
const char *str;
public:
Str() : str("---") {
}
explicit Str(const char *str) : str(str) {
}
friend std::ostream &operator <<(std::ostream &os, const Str &s);
};
std::ostream &operator <<(std::ostream &os, const Str &s) {
return os << s.str;
}
int main() {
Str s1;
std::cout << s1 << '\n';
Str s2("Hi!");
std::cout << s2 << '\n';
s2 = s1;
std::cout << s2 << '\n';
}
$ g++ -std=c++17 -pedantic -Wall -Wextra -Werror -O3 temp.cpp && ./a.out --- Hi! ---