Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 01.11.2011
Сообщений: 59
1

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

04.03.2012, 14:36. Показов 2185. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Построить массив из указателей (базового типа) на объекты обоих классов.
Выбрать объекты производного класса, отсортировать их и сложить как числа.
Выбрать объекты базового класса, отсортировать их и сцепить их в одну строку, начиная с последнего и до первого.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2012, 14:36
Ответы с готовыми решениями:

Полиморфизм
Я хотел реализовать множество, используя множественное наследование, но когда написал template...

Полиморфизм
Всем доброго времени суток.Сразу к делу. Если описывать с помощью полиморфизма подклассы и потом...

Полиморфизм
Помогите сделать в коде полиморфизм. Тему особо не понимаю Если что, базовый класс - "Страна" и...

Полиморфизм
Здравствуйте :) Я пытался читать про полиморфизм. Читал-читал, но не очень дошло. Понял, что можно...

8
0 / 0 / 0
Регистрация: 01.11.2011
Сообщений: 59
13.03.2012, 23:29  [ТС] 2
Пожалуйста, помогите с кодом.
0
0 / 0 / 0
Регистрация: 01.11.2011
Сообщений: 59
16.03.2012, 19:52  [ТС] 3
Пожалуйста, очень срочно нужно!!
0
5232 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
16.03.2012, 19:55 4
Цитата Сообщение от Тина_Ливингстон Посмотреть сообщение
на объекты обоих классов.
Каких классов?

Цитата Сообщение от Тина_Ливингстон Посмотреть сообщение
отсортировать их и сцепить их в одну строку
Как отсортировать? В какую еще строку?
0
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
16.03.2012, 19:56 5
С начала создания тему прошло 12 дней, можно было и самой что то набрасать и с конктретными вопросами обратиться!

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

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

стр. 598
0
0 / 0 / 0
Регистрация: 01.11.2011
Сообщений: 59
16.03.2012, 20:50  [ТС] 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 / 0
Регистрация: 01.11.2011
Сообщений: 59
16.03.2012, 21:47  [ТС] 7
Я не понимаю,как писать код...
0
277 / 150 / 25
Регистрация: 05.11.2011
Сообщений: 429
Записей в блоге: 1
16.03.2012, 21:53 8
Цитата Сообщение от Тина_Ливингстон Посмотреть сообщение
Я не понимаю,как писать код...
Еще раз напишите условие задачи с учетом всех деталей вместе.
0
0 / 0 / 0
Регистрация: 01.11.2011
Сообщений: 59
16.03.2012, 22:10  [ТС] 9
Цитата Сообщение от Xind Посмотреть сообщение
Еще раз напишите условие задачи с учетом всех деталей вместе.
1. Создание класса
Построить класс Str с обязательными полями:
 длина строки;
 указатель char* под указатель на динамически выделяемую под строку память;
с обязательными методами:
 конструктор пустой строки (без параметров);
 конструктор, принимающий С-строку;
 конструктор, принимающий параметр – символ;
 конструктор копирования;
 деструктор;
 очистка строки;
 перегруженный оператор + для сцепления двух строк;
 перегруженный оператор =;
 перегруженные операторы сравнения строк.

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

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

Вот все условие задачи...Решение первых двух выше.
Помогите, пожалуйста.(
0
16.03.2012, 22:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2012, 22:10
Помогаю со студенческими работами здесь

Полиморфизм
Хай :senor: class MyPrint//производный класс { public: MyPrint() { cout &lt;&lt; &quot;Constructor...

Полиморфизм
Сколько я не читал книг и уроков по С++-программированию, я так и не смог понять что такое...

Полиморфизм
В одной дешевой книжке про него пишут а в другой дорогой нет и понять я почему то немогу точно как...

Полиморфизм.
Доброго времени суток. Помогите решить следующую задачку: Создать класс периодическое издание...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru