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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Тина_Ливингстон
0 / 0 / 0
Регистрация: 01.11.2011
Сообщений: 59
04.03.2012, 14:36     Полиморфизм c++ #1
Построить массив из указателей (базового типа) на объекты обоих классов.
Выбрать объекты производного класса, отсортировать их и сложить как числа.
Выбрать объекты базового класса, отсортировать их и сцепить их в одну строку, начиная с последнего и до первого.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2012, 14:36     Полиморфизм c++
Посмотрите здесь:

Полиморфизм C++
Полиморфизм :( C++
C++ полиморфизм
C++ Полиморфизм
Полиморфизм. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Тина_Ливингстон
0 / 0 / 0
Регистрация: 01.11.2011
Сообщений: 59
13.03.2012, 23:29  [ТС]     Полиморфизм c++ #2
Пожалуйста, помогите с кодом.
Тина_Ливингстон
0 / 0 / 0
Регистрация: 01.11.2011
Сообщений: 59
16.03.2012, 19:52  [ТС]     Полиморфизм c++ #3
Пожалуйста, очень срочно нужно!!
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
16.03.2012, 19:55     Полиморфизм c++ #4
Цитата Сообщение от Тина_Ливингстон Посмотреть сообщение
на объекты обоих классов.
Каких классов?

Цитата Сообщение от Тина_Ливингстон Посмотреть сообщение
отсортировать их и сцепить их в одну строку
Как отсортировать? В какую еще строку?
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
16.03.2012, 19:56     Полиморфизм c++ #5
С начала создания тему прошло 12 дней, можно было и самой что то набрасать и с конктретными вопросами обратиться!

Про полиморфизм можно почитать

Дейтел Х., Дейтел П. - Как программировать на C++

стр. 598
Тина_Ливингстон
0 / 0 / 0
Регистрация: 01.11.2011
Сообщений: 59
16.03.2012, 20:50  [ТС]     Полиморфизм c++ #6
Цитата Сообщение от 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 / 0 / 0
Регистрация: 01.11.2011
Сообщений: 59
16.03.2012, 21:47  [ТС]     Полиморфизм c++ #7
Я не понимаю,как писать код...
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
16.03.2012, 21:53     Полиморфизм c++ #8
Цитата Сообщение от Тина_Ливингстон Посмотреть сообщение
Я не понимаю,как писать код...
Еще раз напишите условие задачи с учетом всех деталей вместе.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2012, 22:10     Полиморфизм c++
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Тина_Ливингстон
0 / 0 / 0
Регистрация: 01.11.2011
Сообщений: 59
16.03.2012, 22:10  [ТС]     Полиморфизм c++ #9
Цитата Сообщение от Xind Посмотреть сообщение
Еще раз напишите условие задачи с учетом всех деталей вместе.
1. Создание класса
Построить класс Str с обязательными полями:
 длина строки;
 указатель char* под указатель на динамически выделяемую под строку память;
с обязательными методами:
 конструктор пустой строки (без параметров);
 конструктор, принимающий С-строку;
 конструктор, принимающий параметр – символ;
 конструктор копирования;
 деструктор;
 очистка строки;
 перегруженный оператор + для сцепления двух строк;
 перегруженный оператор =;
 перегруженные операторы сравнения строк.

2. Наследование
Построить производный класс Str10 как строку только из цифр.
Определить методы: сравнения как чисел, преобразования в число, создание из числа, сложения как чисел и другие необходимые.

3. Полиморфизм
Построить массив из указателей (базового типа) на объекты обоих классов.
Выбрать объекты производного класса, отсортировать их и сложить как числа.
Выбрать объекты базового класса, отсортировать их и сцепить их в одну строку, начиная с последнего и до первого.

Вот все условие задачи...Решение первых двух выше.
Помогите, пожалуйста.(
Yandex
Объявления
16.03.2012, 22:10     Полиморфизм c++
Ответ Создать тему
Опции темы

Текущее время: 03:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru