Добавил:
vvrstcnho
Рад, если кому-то помог
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы С++ (для ИВТ) / Готовые лабы С++ / Лаба2 / Laba 2 (19)
.cpp#include <iostream>
#include <cstring>
#include <windows.h>
using namespace std;
class my_str {
private:
size_t len;
char* str;
public:
my_str(const char* s) : len(strlen(s)) {
str = new char[len + 1];
::strcpy(str, s); // используем глобальную strcpy
cout << "Создана строка: \"" << str << "\"" << endl;
}
~my_str() {
cout << "Удалена строка: \"" << str << "\"" << endl;
delete[] str;
}
// Конструктор копирования
my_str(const my_str& other) : len(other.len) {
str = new char[len + 1];
::strcpy(str, other.str); // используем глобальную strcpy
cout << "Создана копия строки: \"" << str << "\"" << endl;
}
// Оператор присваивания
my_str& operator=(const my_str& other) {
if (this != &other) {
delete[] str;
len = other.len;
str = new char[len + 1];
::strcpy(str, other.str); // используем глобальную strcpy
}
return *this;
}
void strcpy(const my_str& t) {
if (len == t.len) {
::strcpy(str, t.str); // глобальная strcpy
} else {
delete[] str;
len = t.len;
str = new char[len + 1];
::strcpy(str, t.str); // глобальная strcpy
}
len = t.len;
cout << "Скопирована строка: \"" << str << "\"" << endl;
}
const char* c_str() const { return str; }
char* getStr() { return str; } // неконстантный доступ
};
int main() {
SetConsoleOutputCP(65001);
cout << "=== Задание 2.19 - Исправление ошибок ===" << endl;
my_str a("aaa"), b("bb");
const my_str c("ccc");
cout << "\nВызовы функций:" << endl;
cout << "1. b.strcpy(c): ";
b.strcpy(c); // my_str::strcpy
cout << "2. ::strcpy(b.getStr(), a.c_str()): ";
::strcpy(b.getStr(), a.c_str()); // глобальная strcpy
cout << "3. b.strcpy(b): ";
b.strcpy(b); // my_str::strcpy
// c.strcpy(a); // ошибка - c константный
cout << "4. c.strcpy(a) - ЗАКОММЕНТИРОВАНО (c константный)" << endl;
cout << "5. ::strcpy(a.getStr(), b.c_str()): ";
::strcpy(a.getStr(), b.c_str()); // глобальная strcpy
cout << "\nОбласти видимости функций:" << endl;
cout << "- b.strcpy(c): функция-член класса my_str" << endl;
cout << "- ::strcpy(...): глобальная функция из <cstring>" << endl;
cout << "- b.strcpy(b): функция-член класса my_str" << endl;
cout << "- ::strcpy(...): глобальная функция из <cstring>" << endl;
return 0;
}
Соседние файлы в папке Лаба2
