Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Полиморфизм c++ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Реализовать команду Сd-смена поточного каталога в Borland C++ http://www.cyberforum.ru/cpp-beginners/thread512074.html
Задача: Реализовать команду СD-смена поточного каталога в Borland C++ (как в коммандной строке)
C++ Наследование STR c++ Построить производный класс Str10 как строку только из цифр. Определить методы: сравнения как чисел, преобразования в число, создание из числа, сложения как чисел и другие необходимые. http://www.cyberforum.ru/cpp-beginners/thread512071.html
Класс «Комплексное число» C++
Разработать консольную программу на языке С++, в которой описывается и используется класс. Требования к оформлению класса те же, что и для первого задания. Для объектов класса выполнить перегрузку...
C++ Логический элемент «2-2И-2ИЛИ-НЕ»
Помогите с разработкой класса логического элемента «2-2И-2ИЛИ-НЕ»...буду рад за любую информацию!!!
C++ Получение информации о дисках установленных на компьютере http://www.cyberforum.ru/cpp-beginners/thread512051.html
Здравствуйте! Помогите мне пожалуйста написать консольное приложени на с++. В универе задали на лаб. работу.. Цель: изучение архитектуры персональных компьютеров, дисковых накопителей и файловой...
C++ Объединить эти массивы так, чтобы результирующий целочисленный массив D (размера NA + NB + NC) остался упорядоченным по убыванию. Даны три целочисленных массива A, B и C размера NA, NB, NC соответ-ственно, элементы которых упорядочены по убыванию. Объединить эти массивы так, чтобы результирующий целочисленный массив D (размера... подробнее

Показать сообщение отдельно
Тина_Ливингстон
0 / 0 / 0
Регистрация: 01.11.2011
Сообщений: 59
16.03.2012, 20:50  [ТС]
Цитата Сообщение от Kastaneda Посмотреть сообщение
Каких классов?


Как отсортировать? В какую еще строку?

Извините, не написала про классы...

Вот задание:
1 класс
Построить класс Str с обязательными полями:
 длина строки;
 указатель char* под указатель на динамически выделяемую под строку память;
с обязательными методами:
 конструктор пустой строки (без параметров);
 конструктор, принимающий С-строку;
 конструктор, принимающий параметр – символ;
 конструктор копирования;
 деструктор;
 очистка строки;
 перегруженный оператор + для сцепления двух строк;
 перегруженный оператор =;
 перегруженные операторы сравнения строк.
Вот решение:
header.h
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
#include <cstring>
#include <iostream>
#include <string>
using namespace std;
 
class Str
{
private:
    char* str;
    size_t n;
public:
    Str();//конструктор без параметров пустой строки
    Str(const char*);//конструктор строки
    Str(const Str&);//конструктор копирования
    Str(char);//конструктор, принимающий параметр – символ
    ~Str();//деструктор
    void Clear();//очистка строки
    Str& operator=(const Str&);//Перегрузка оператора присваивания
    Str operator+(const Str&)const;//перегр оператор + сцепления 2 строк
    bool operator>(const Str&)const;
    bool operator<(const Str&)const;
    bool operator==(const Str&)const;
    const char* c_str()const;
    size_t size()const;
    friend istream& operator>>( istream& is, Str& s )//перегрузка ввода
    {
        string s1;
        is >> s1;
        s.n = s1.size();
        delete[] s.str;
        s.str = new char[s.n + 1];
        strcpy(s.str, s1.c_str());
        return is;
    }
    friend ostream& operator<<( ostream& os, const Str& s )//Перегрузка оператора вывода
    {
        return os << s.str;
    }
    friend std::istream& getline(std::istream& is, Str& s)
    {
        std::string s1;
        std::getline(is, s1);
        s.n = s1.size();
        delete[] s.str;
        s.str = new char[s.n + 1];
        strcpy(s.str, s1.c_str());
        return is;
    }
};
методы
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
#include "header.h"
 
 
//конструктор пустой строки (без параметров)
Str::Str() : n(0), str(new char)
{
    str[0] = '\0';
}
 
//конструктор, принимающий С-строку
Str::Str(const char* s) : n(s ? strlen(s) : 0)
{
    str = new char[n + 1];
    strcpy(str, s ? s : "");
}
 
//конструктор, принимающий параметр – символ
Str::Str(char c) : n(1), str(new char[2])
{
    str[0] = c;
    str[1] = '\0';
}
 
//конструктор копирования
Str::Str(const Str& st) : n(st.n), str(new char[st.n + 1])
{
    strcpy(str, st.str);
}
 
//деструктор
Str::~Str()
{
    delete [] str;
}
 
//очистка строки
void Str::Clear()
{
    delete[] str;
    n = 0;
    str = new char[n + 1];
    str[0] = '\0';
 
}
 
//операция +
Str Str::operator+ (const Str& st)const
{
        char* k = new char[n + st.n + 1];
        return strcat(strcpy(k, str), st.str);
 
}
 
Str& Str::operator= (const Str& s)
{
    if (this == &s) return *this;
    delete [] str ;
    n = s.n;
    str = new char[n + 1];
    strcpy(str, s.str);
    return *this;
}
 
//операторы стравнения
bool Str::operator== (const Str& p)const
{
    if(strcmp(str,p.str)==0)
    return true;
    else
        return false;
}
 
bool Str::operator> (const Str& p)const
{
    return strcmp(str, p.str) > 0;
}
 
bool Str::operator< (const Str& p)const
{
    return strcmp(str, p.str) < 0;
}
//
const char* Str::c_str() const
{
    return str;
}
 
std::size_t Str::size() const
{
    return n;
}
main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "header.h"
 
int main()
{
    Str s1, s2, sum;
    cout<<"Input Str 1 : "<<endl;
    getline(cin, s1);
    cout<<"InputStr 2 : "<<endl;
    getline(cin, s2);
    cout<<"Str summation : "<<endl;
    sum = s1 + s2;
    cout<< sum <<endl;
    if(s1>s2)
        cout<<"First more second"<<endl;
    if(s1<s2)
        cout<<"Second more the first"<<endl;
    if(s1==s2)
        cout<<"First and second ravni"<<endl;
    return 0;
}
Задание на класс 2
Построить производный класс Str10 как строку только из цифр.
Определить методы: сравнения как чисел, преобразования в число, создание из числа, сложения как чисел и другие необходимые.
Решение:
header.h
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
#include <cstring>
#include <iostream>
#include <string>
using namespace std;
 
class Str
{
private:
    char* str;
    int  n;
public:
    Str();//конструктор без параметров пустой строки
    Str(const char*);//конструктор строки
    Str(const Str&);//конструктор копирования
    Str(char);//конструктор, принимающий параметр – символ
    ~Str();//деструктор
    Str& operator=(const Str&);//Перегрузка оператора присваивания
    Str operator+(const Str&)const;//перегр оператор + сцепления 2 строк
    bool operator>(const Str&)const;
    bool operator<(const Str&)const;
    bool operator==(const Str&)const;
    const char* c_str()const;
    size_t size()const;
    //int Atoi(const char* string);
    //char* Itoa(int value, char* string, int radix);
    friend istream& operator>>( istream& is, Str& s )//перегрузка ввода
    {
        string s1;
        is >> s1;
        s.n = s1.size();
        delete[] s.str;
        s.str = new char[s.n + 1];
        strcpy(s.str, s1.c_str());
        return is;
    }
    friend ostream& operator<<( ostream& os, const Str& s )//Перегрузка оператора вывода
    {
        return os << s.str;
    }
    friend std::istream& getline(std::istream& is, Str& s)
    {
        std::string s1;
        std::getline(is, s1);
        s.n = s1.size();
        delete[] s.str;
        s.str = new char[s.n + 1];
        strcpy(s.str, s1.c_str());
        return is;
    }
};
методы
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
#include "header.h"
 
 
//конструктор пустой строки (без параметров)
Str::Str() : n(0), str(new char)
{
    str[0] = '\0';
}
 
//конструктор, принимающий С-строку
Str::Str(const char* s) : n(s ? strlen(s) : 0)
{
    str = new char[n + 1];
    strcpy(str, s ? s : "");
}
 
//конструктор, принимающий параметр – символ
Str::Str(char c) : n(1), str(new char[2])
{
    str[0] = c;
    str[1] = '\0';
}
 
//конструктор копирования
Str::Str(const Str& st) : n(st.n), str(new char[st.n + 1])
{
    strcpy(str, st.str);
}
Str& Str::operator= (const Str& s)
{
    if (this == &s) return *this;
    delete [] str ;
    n = s.n;
    str = new char[n + 1];
    strcpy(str, s.str);
    return *this;
}
 
//операторы сравнения
bool Str::operator== (const Str& p)const
{
    int k=atoi(str);
    int l=atoi(p.str);
    if(k==l)
        return true;
    else
        return false;
}
 
bool Str::operator> (const Str& p)const
{
    int k=atoi(str);
    int l=atoi(p.str);
    if(k>l)
        return true;
    else
        return false;
}
 
bool Str::operator< (const Str& p)const
{
    int k=atoi(str);
    int l=atoi(p.str);
    if(k<l)
        return true;
    else
        return false;
}
//операция +
Str Str::operator+ (const Str& st)const
{
    int k=atoi(str);
    int l=atoi(st.str);
    int s=k+l;
    char*r=itoa(s,str,10);
    return r;
}
//
const char* Str::c_str() const
{
    return str;
}
 
std::size_t Str::size() const
{
    return n;
}
 //деструктор
Str::~Str()
{
    //delete [] str;
}
main
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
#include "header.h"
 
int main()
{
    setlocale (LC_ALL,".1251");
    Str s1, s2, sum,razn;
    int c;
    cout<<"Введите строку 1 : "<<endl;
    getline(cin, s1);
    cout<<"Введите строку 2 : "<<endl;
    getline(cin, s2);
    cout<<endl;
    if(s1>s2)
        cout<<"Первое число больше второго"<<endl<<endl;
    if(s1<s2)
        cout<<"Второе число больше первого"<<endl<<endl;
    if(s1==s2)
        cout<<"Введенные числа равны."<<endl<<endl;
    cout<<"Сумма введенных чисел равна  : ";
    sum = s1 + s2;
    cout<< sum <<endl;
    
    return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru