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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sylvos
-25 / 6 / 1
Регистрация: 06.04.2011
Сообщений: 85
#1

Помогите разобраться в Наследование - C++

22.09.2011, 14:39. Просмотров 398. Ответов 4
Метки нет (Все метки)

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
#include<iostream>
using namespace std;
class Counter1
{
protected:
    int count;
public:
    Counter1():count(0)
    {
    }
    Counter1(int c):count(c)
    {
    }
    int Get_count()
    {
        return count;
    }
    Counter1 operator++()//Префиксный
    {
        return Counter1(++count);
    }
};
class Counter2:public Counter1
{
public:
    Counter1 operator--()//Префиксный
    {
        return Counter1(--count);
    }
};
class Counter3:public Counter2
{
public:
    Counter1 operator++(int)//Постфиксный 
    {
        return Counter1(count++);
    }
    Counter1 operator--(int)//Постфиксный 
    {
        return Counter1(count--);
    }
};
int main()
{
    Counter3 C3;
    C3++;
    C3++;
    ++C3;   //Error
    C3--;
    --C3;   //Error
    return 0;
}
Не получается перегрузить Постфиксный инкремент, декремент в наследуемом классе.
Или вот еще один пример со строками

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
#include<iostream>
#include<cstring>
using namespace std;
class String1
{
protected:
    enum {SZ=80};
    char str[SZ];
public:
    String1()
    {
        str[0]='\0';
    }
    String1(char s[])
    {
        strcpy(str,s);
    }
    char display()const
    {
        return *str;
    }
    operator char*()
    {
        return str;
    }
};
class String2:public String1
{
public:
    String2()
    {
        str[0]='\0';
    }
    String2(char s[])
    {
        if(strlen(s)<SZ-1)
            String1(s);
        if(strlen(s)>SZ-1)
        {
            for(int j=0;j<SZ-1;j++)
                str[j]=s[j];
            str[SZ-1]='\0';
        }
    }
};
class String3:public String2
{
public:
    String3()
    {
        str[0]='\0';
    }
    String3(char s[])
    {
        String2(s);//Error Переопределение формального параметра "s" Пробовал так String2::String2(s); но тогда строки остаются пустыми
    }
    char& left(char s[],int n)//Добавление n символов в строку с лева
    {
        for(int i=0;i<n;i++)
            str[i]=s[i];
        str[n]='\0';
        return *str;
    }
    char& mid(char s[],int S,int n)//Добавление n символов в строку с символа S
    {
        for(int i=0,z=S;i<n;i++,z++)
            str[i]=s[z];
        str[n]='\0';
        return *str;
    }
    char& right(char s[],int n)//Добавление n символов в строку с права
    {
        for(int i=0,z=strlen(s)-n+1;i<n;i++,z++)
            str[i]=s[z];
        str[n]='\0';
        return *str;
    }
};
int main()
{
    String3 s1="This is a very long string which is probably no, certainly--going to exceed the limit set by SZ.";
    cout<<"\ns1="<<s1.display()<<endl;
    String3 s2="This is a short string.";
    cout<<"\ns2="<<s2.display()<<endl;
    cout<<endl;
    return 0;
}
Error Переопределение формального параметра "s" Пробовал так String2::String2(s); но тогда строки остаются пустыми
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2011, 14:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помогите разобраться в Наследование (C++):

Не могу разобраться с ошибками, наследование и шаблоны - C++
Задание: Смоделировать стек на базе статического массива по заданию. Написать основные операции для работы со стеком (push, pop, top,...

Наследование. Помогите с этими public, protected. private - C++
Вот код, в нем вылетает ошибка Unit2.cpp(16): E2251 Cannot find default constructor to initialize base class 'My' в файле unit2.cpp во...

If else помогите разобраться - C++
Доброго времени суток всем. Не так давно начали программировать в C++ MS Visual Studio 2010? и возникло у меня затруднение в работе с if ...

Помогите разобраться - C++
У меня есть координаты North,West,East,South. Мне нужно отобразить их на осях ОХ и ОУ. Допустим я ввожу North 5 East 3 South 1 ...

Помогите разобраться с try-catch - C++
#include &lt;iostream.h&gt; int main() { int s = 0; try { int a = 6 / s; } catch(char* exception) {

Помогите разобраться с итераторами - C++
У меня есть шаблон класса контейнер. Я использую vector из stl. Так вот мне нужен итератор для поиска find ( first, last, value ) но...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ree.exe
56 / 56 / 4
Регистрация: 01.08.2011
Сообщений: 141
22.09.2011, 15:59 #2
Вот так попробуй.
C++
1
2
3
4
5
6
//...
        String3(char s[]) : String2(s)
        {
               
        }
//.....
0
Sylvos
-25 / 6 / 1
Регистрация: 06.04.2011
Сообщений: 85
22.09.2011, 16:05  [ТС] #3
Ree.exe, Записывает только первый символ, а со второй строкой нечего не записывает.
0
Ree.exe
56 / 56 / 4
Регистрация: 01.08.2011
Сообщений: 141
22.09.2011, 16:31 #4
Вот немного переделал твой код.
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
#include<iostream>
#include<cstring>
using namespace std;
class String1
{
protected:
        enum {SZ=80};
        char str[SZ];
public:
        String1(const char* s="")
        {
            if(strlen(s)>79)
            {
                for(int i=0; i<79 ; i++)
                    str[i]=s[i];
                str[80-1]='\0';
            }
            else
                strcpy(str,s);
        }
        void display()const
        {
            cout<<str;
        }
};
/*  Зачем этот класс?
class String2:public String1
{
public:
        String2(const char* s="")
        {
                if(strlen(s)<SZ-1)
                        String1(s);
                if(strlen(s)>SZ-1)
                {
                        for(int j=0;j<SZ-1;j++)
                                str[j]=s[j];
                        str[SZ-1]='\0';
                }
        }
};
*/
class String3:public String1
{
public:
        
        String3(const char* s=""): String1(s)
        {
                
        }
        char& left(char s[],int n)//Добавление n символов в строку с лева
        {
                for(int i=0;i<n;i++)
                        str[i]=s[i];
                str[n]='\0';
                return *str;
        }
        char& mid(char s[],int S,int n)//Добавление n символов в строку с символа S
        {
                for(int i=0,z=S;i<n;i++,z++)
                        str[i]=s[z];
                str[n]='\0';
                return *str;
        }
        char& right(char s[],int n)//Добавление n символов в строку с права
        {
                for(int i=0,z=strlen(s)-n+1;i<n;i++,z++)
                        str[i]=s[z];
                str[n]='\0';
                return *str;
        }
};
int main()
{
    setlocale(LC_ALL,"");
        String3 s1("This is a very long string which is probably no, certainly--going to exceed the limit set by SZ.");
        cout<<"\ns1=";
        s1.display();
        String3 s2="This is a short string.";
        cout<<"\ns2=";
        s2.display();
        cout<<endl;
        return 0;
}
0
Sylvos
-25 / 6 / 1
Регистрация: 06.04.2011
Сообщений: 85
22.09.2011, 16:46  [ТС] #5
Это должно быть множественное наследование, сначала есть класс String1 который не делает проверку на выход из строки, его наследует класс String2 который делает проверку, и класс String3 который наследует String2 и добавляет методы left nid right
Вся проблема в классе String2, с короткой строкой конструктор с параметром класса String1 не запускается.
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
#include<iostream>
#include<cstring>
using namespace std;
class String1
{
protected:
        enum {SZ=80};
        char str[SZ];
public:
        String1()
        {
                str[0]='\0';
        }
        String1(char s[])
        {
                strcpy(str,s);
        }
        void display()
        {
                cout<<str;
        }
};
class String2:public String1
{
public:
        String2()
        {
                str[0]='\0';
        }
        String2(char y[])
        {
                if(strlen(y)>SZ-1)
                {
                        for(int j=0;j<SZ-1;j++)
                                str[j]=y[j];
                        str[SZ-1]='\0';
                }
                if(strlen(y)<SZ-1)
                    String1(y);     // НЕ РАБОТАЕТ
        }
};
int main()
{
        String2 s1="This is a very long string which is probably no, certainly--going to exceed the limit set by SZ.";
        cout<<"\ns1=";
        s1.display();
 
        String2 s2="This is a short string.";   //Строка 2 пустая в нее нечего не записываеться
        cout<<"\ns2=";
        s2.display();
 
        cout<<endl;
        return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2011, 16:46
Привет! Вот еще темы с ответами:

Помогите разобраться с switch - C++
Вот код программы: int i_1x; i_1x = 0; char a_n; ifstream input(&quot;input.txt&quot;); input &gt;&gt; a_n; switch...

Помогите разобраться с задачей.... - C++
Дорогие программисты прошу вас помочь в следующем вопросе: мне нужно открыть в С++ файл формата BMP и получить значение его пикселей в виде...

Помогите разобраться с кодом - C++
Код - проверка ввода данных. Если вводиться &quot;x6x&quot;, то вызывается исключение, правильным вводом являются только символы, например: &quot;xxx&quot;,...

Помогите разобраться в коде - C++
Помогите мне разобраться в коде. Заранее спасибо. int seek_substring_KMP (char s, char p) { int i, j, N, M; N = strlen(s); M =...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.09.2011, 16:46
Ответ Создать тему
Опции темы

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