Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
2 / 2 / 1
Регистрация: 04.04.2018
Сообщений: 351
1

Мой стринг, виртуальные функции

18.08.2019, 11:04. Показов 1448. Ответов 3
Метки нет (Все метки)

Пример из книги - жалуется на 83 строку - не существует подходящего конструктора для преобразования const char в String
Нужно сделать константной строку? Тогда ошибка в функции strcpy жалуется на str
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// strimem.cpp
// Класс String с экономией памяти
// Перегружаемая операция присваивания и конструктор         // копирования
#include <iostream>
#include <cstring>              // для strcpy() и т. д.
using namespace std;
///////////////////////////////////////////////////////////
class strCount                  // Класс-счетчик уникальных строк
{
private:
    int count;                  // собственно счетчик
    char* str;                  // указатель на строку
    friend class String;        // сделаем себя доступными
    //методы скрыты          
//---------------------------------------------------------
    strCount(char* s)           // конструктор с одним аргументом
    {
        int length = strlen(s);   // длина строкового
                                  // аргумента
        str = new char[length + 1]; // занять память
                                  // под строку
        strcpy(str, s);           // копировать в нее аргументы
        count = 1;                  // считать с единицы
    }
    //---------------------------------------------------------
    ~strCount()                 // деструктор
    {
        delete[] str;
    }         // удалить строку
};
///////////////////////////////////////////////////////////
class String                    // класс String
{
private:
    friend class strCount;
    strCount* psc;              // указатель на strCount 
public:
    String()                    // конструктор без аргументов
    {
        psc = new strCount(NULL);
    }
    //---------------------------------------------------------
    String(char* s)             // конструктор с одним аргументом
    {
        psc = new strCount(s);
    }
    //---------------------------------------------------------
    String(String& S)           // конструктор копирования
    {
        psc = S.psc;
        (psc->count)++;
    }
    //---------------------------------------------------------
    ~String()                   // деструктор
    {
        if (psc->count == 1)         // если последний
                                  // пользователь,
            delete psc;             // удалить strCount
        else                      // иначе  
            (psc->count)--;         // уменьшить счетчик
    }
    //---------------------------------------------------------
    void display()              // вывод String
    {
        cout << psc->str;         // вывести строку
        cout << " (addr=" << psc << ")";  // вывести адрес
    }
    //---------------------------------------------------------
    void operator = (String& S) // присвоение String
    {
        if (psc->count == 1)         // если последний пользователь, 
            delete psc;             // удалить strCount
        else                      // иначе
            (psc->count)--;         // уменьшить счетчик
        psc = S.psc;              //использовать strCount
                                  //аргумента
        (psc->count)++;           //увеличить счетчик
    }
};
///////////////////////////////////////////////////////////
int main()
{
    String s3 = "Муха по полю пошла, муха денежку нашла";
    cout << "\ns3="; s3.display(); //вывести s3
 
    String s1;                     //определить объект String
    s1 = s3;                       //присвоить его другому объекту
    cout << "\ns1="; s1.display(); //вывести его
 
    String s2(s3);                 //инициализация
    cout << "\ns2="; s2.display(); //вывести
                                   //инициализированное
    cout << endl;
    return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.08.2019, 11:04
Ответы с готовыми решениями:

Виртуальные и чисто виртуальные функции
Чем они отличаются?? если можно, с примерами. И как из виртуальной функции сделать чисто...

Виртуальные функции
Доброго времени суток. Есть задание. Создать абстрактный класс Function (функция) с виртуальными...

виртуальные функции
сделать какой либо из методов класса виртуальным #include&lt;iostream.h&gt; #include&lt;stdio.h&gt; class...

Виртуальные функции
Не работает код. Проблема в виртуальной функции. Как это можно исправить? #include &lt;iostream&gt; ...

3
170 / 122 / 61
Регистрация: 06.02.2015
Сообщений: 300
18.08.2019, 11:39 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
    String s3 = "Муха по полю пошла, муха денежку нашла";
    setlocale(LC_ALL, "Russian");
    cout << "\ns3="; s3.display(); //вывести s3
 
    String s1="";                     //определить объект String
    s1 = s3;                       //присвоить его другому объекту
    cout << "\ns1="; s1.display(); //вывести его
 
    String s2(s3);                 //инициализация
    cout << "\ns2="; s2.display(); //вывести
                                   //инициализированное
    cout << endl;
    system("pause");
    return 0;
}
среда разработки какая ?
0
Модератор
Эксперт С++
11071 / 9128 / 5485
Регистрация: 18.12.2011
Сообщений: 24,399
18.08.2019, 11:45 3
Лучший ответ Сообщение было отмечено dimmarvel как решение

Решение

Цитата Сообщение от dimmarvel Посмотреть сообщение
String(char* s) // конструктор с одним аргументом
Цитата Сообщение от dimmarvel Посмотреть сообщение
strCount(char* s) // конструктор с одним аргументом
C++
1
2
String(const char* s)
strCount(const char* s)
1
2 / 2 / 1
Регистрация: 04.04.2018
Сообщений: 351
18.08.2019, 11:56  [ТС] 4
visual studio
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.08.2019, 11:56

Виртуальные функции
Имеется базовый класс Shape: class Shape { protected: virtual void drawShape() { } } и...

Виртуальные функции
Составить программу в С Buildere. Объявить базовый класс с именем person {имя, возраст, группа}....

Виртуальные функции
Если в базовом классе А есть виртуальная функция show() перегруженная, то есть имеется три разные...

виртуальные функции
C++ подскажите пожалуста на словах код писать ненадо. как преопределить функцию virtual Print(). ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.