Изучаю C++. Буду очень признателен за любую помощь. Не нашел ответа на сайте. Нужно переопределить оператор присваивания. Сейчас сделано так:
Stroka& Stroka::operator=(const Stroka& s)
{
strcpy(str, s.str);
return *this;
}
Но нужно, чтобы он работал с использованием конструкции вида - без использования strcpy:
void Stroka::kopir(char *first, char *second)
{
while (*second) {
*first++ = *second++;
}
*first = '\0'; // символ перевода строки, = \n
}
Полный код программы взят из учебного примера, выглядит следующим образом:
#include "pch.h"
#include <iostream>
#include <iomanip>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include <string.h>
using namespace std;
class Stroka {
char str[80];
public:
// Конструктор класса
Stroka(char*);
Stroka(const char*);
// Конструктор класса
Stroka() {}
Stroka(const Stroka&); // Конструктор копирования
Stroka& operator=(const Stroka&); // переопределение/перегрузка операции присваивания
Stroka& operator+(const Stroka&); // переопределение операции сложения
int operator==(const Stroka&); // переопределение операции сравнения
void vvod();
void vyvod();
void kopir(char *first, char *second);
}
;
Stroka::Stroka(char *string)
{
strcpy(str, string);
}
Stroka::Stroka(const Stroka& s)
{
strcpy(str, s.str);
}
Stroka& Stroka::operator+(const Stroka& s)
{
strcat(str, s.str);
return *this;
}
// метод класса Stroka
int Stroka::operator==(const Stroka& s)
{
if ((strcmp(str, s.str)) == 0)
return 1;
else
return 0;
}
void Stroka::vvod()
{
cout << "Введите текст:" << endl;
cin >> str;
}
void Stroka::vyvod()
{
cout << "Вывод текста на экран:" << endl;
cout << str << endl;
}
Stroka& Stroka::operator=(const Stroka& s)
{
strcpy(str, s.str);
return *this;
}
void Stroka::kopir(char *first, char *second)
{
while (*second) {
*first++ = *second++;
}
*first = '\0'; // символ перевода строки, = \n
}
int main(int)
{
setlocale(0, ""); // установить русскую локацию
Stroka s1;
s1.vvod();
Stroka s3;
s3.vvod();
Stroka s4;
s4 = s1;
Stroka s5;
s3.vyvod();
s5 = s1 + s3 + s4;
s5.vyvod();
if (s1 == s5)
cout << "строки s1 и s5 равны";
else
if (s1 == s4)
cout << "строки s1 и s4 равны";
}
;
Можно вот так:
Stroka& Stroka::operator=(const Stroka& s)
{
this->kopir(str, s.str);
return *this;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Если к одному сигналу подключены множество слотов, то в каком порядке оны вызываются?
Недавно появился снэпшот Qt 513, в котором у QImage стал доступен формат QImage::Format_Grayscale16
Попалась следующая задачаИмеется входное значение частоты Fin и выходное Fout
При соединении с указателями, которые находятся внутри локального map, вылетает программа с ошибкой: Segmentation faultЕсли сделаю мап статик или как...