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

Наследование, виртуальный метод просмотра, метод (сравнение символьных массивов)

03.05.2013, 11:58. Просмотров 709. Ответов 0
Метки нет (Все метки)

Доброго времени суток! Прошу помочь разобраться с заданием:
Напишите программу на языке программирования С++, которая должна содержать:
- базовый класс, включающий:
- два элемента в виде строк символов S1 и S2;
- конструктор с параметрами для создания динамических строковых объектов;
- деструктор;
- виртуальный метод просмотра текущего состояния объекта;
- производный класс, включающий:
- элемент в виде строки символов S3;
- конструктор с параметрами для создания динамических строковых объектов, передающий данные конструктору базового класса;
- переопределенный метод просмотра текущего состояния объектов;
- метод, реализующий следующую задачу:
в самой длинной строке (считайте, что такая строка одна) из S1, S2 и S3 поменяйте местами первый и последний символы;
- функцию main, в которой создаются объекты и указатели на них, демонстрируется работа методов классов.
С классами и наследованием вроде бы разобрался. Вопросы следующие:
1. Правильно ли у меня реализовано "- виртуальный метод просмотра текущего состояния объекта;" и "- переопределенный метод просмотра текущего состояния объектов; ".
2. Нужен совет, как правильно написать функцию void find_change(- метод, реализующий следующую задачу:
в самой длинной строке (считайте, что такая строка одна) из S1, S2 и S3 поменяйте местами первый и последний символы). Пробовал s.length()думал сравнить значения и таким образом найти большую строку получил
error: request for member 'length' in '((obj2*)this)->obj2::<anonymous>.obj1::s1', which is of non-class type 'char [64]'
если кому не сложно, прошу разъяснить ошибку.
нет необходимости писать за меня функцию, желательно написать как и что делать, чтобы я мог сам написать.
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
#include <string.h>
#include <string>
using namespace std;
 
class obj1
{    public:
    obj1(char*,char*);   //конструктор
   ~obj1(void);                  //деструктор
    virtual void show_obj1(void);  //прототип функфии(метод)
    protected:
    char s1[64];
    char s2[64];
};
    obj1::obj1(char *s1,char *s2) //определение конструктора
    {
        strcpy(obj1::s1,s1);
        strcpy(obj1::s2,s2);
    }
    obj1::~obj1(void)
    {
        cout<<"unichtojenie s1: "<<s1<<endl;
        cout<<"unichtojenie s2: "<<s2<<endl;
    }
    void obj1::show_obj1(void)    //функция просмотра
 {
    cout<<"s1: "<<s1<<endl;
    cout<<"s2: "<<s2<<endl;
    }
 
class obj2: public obj1      //производный класс
{public:
    obj2(char*,char*,char*);
    ~obj2(void);
 
    void show_obj2();
    void find_change();
    private:
    char s3[64];
};
obj2::obj2(char *s1,char *s2,char *s3):obj1(s1,s2)
{
    strcpy(obj2::s3,s3);
}
obj2::~obj2(void)
    {
        cout<<"unichtojenie s3: "<<s3<<endl;
    }
void obj2::show_obj2(void)        //переопределенный метод просмотра текущего состояния объектов
{show_obj1();
    cout<<"s3: "<<s3<<endl;
}
void obj2::find_change()
{int i = s1.length();
/*if (s1>s2 && s1>s3)
cout<<"Otrabotala funkciya s1 bolshe: "<<s1<<endl;
else if (s2>s1 && s2>s3)
cout<<"Otrabotala funkciya s2 bolshe: "<<s2<<endl;
else
cout<<"Otrabotala funkciya s3 bolshe: "<<s3<<endl;*/
 
}
    int main()
{
obj2 string1("qweasdasasdsadasd","qwerty","qasdassadwer");
 
string1.show_obj2();
string1.find_change();
 
    return 0;
}
Добавлено через 20 часов 9 минут
Все, проблема решена ! Добрые люди на **************** разъяснили ошибку. Печаль что на cyberforum не нашлось не кого кто мог бы разъяснить такую ошибку, но я это сейчас исправлю
obj1::s1 (кстати, плохая идея называть тип именем obj-что-то, запутаетесь только так)... так вот, obj1::s1 имеет тип char[64]. Это базовый тип данных, не класс, и методов у него, соответственно, тоже нет. Поэтому, когда Вы пишете s1.length(), единственная реакция, которую в силах выдать компилятор - это "что-о-о?!".

Длина C-строки может быть определена библиотечной функцией strlen(). Обратите внимание, что для корректной работы strlen необходимо, чтобы строка в s1 была не длиннее 63 символов. Рекомендуется использовать strncpy() вместо strcpy() в конструкторах для обеспечения этого условия.
может кому пригодится:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void obj2::find_change()
{int a = strlen(s1);
 int b = strlen(s2);
 int c = strlen(s3);
 char temp;
 if (a>b && a>c)
 {temp = s1[0];
 s1[0]=s1[strlen(s1) -1];
 s1[strlen(s1) -1] = temp;
 cout<<"Stroka 1 bolshe: "<<s1<<endl<<endl;}
 else if (b>a && b>c)
 {temp = s2[0];
 s2[0]=s2[strlen(s2) -1];
 s2[strlen(s2) -1] = temp;
 cout<<"Stroka 2 bolshe: "<<s2<<endl<<endl;}
 else
 {temp = s3[0];
 s3[0]=s3[strlen(s3) -1];
 s3[strlen(s3) -1] = temp;
 cout<<"Stroka 3 bolshe: "<<s3<<endl<<endl;}
}
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2013, 11:58
Ответы с готовыми решениями:

private наследование и виртуальный метод
Привет! Тут хотел бы спросить такой вопрос. Есть базовый класс с виртуальным методом в protected...

Сравнение методов сортировки массивов: метод прямого включения и Шелла
Задание: Написать учебно-демонстрационную программу, которая сравнивает методы прямого включения и...

Сравнение символьных буфферов (массивов)
Добрый всем день. Заранее прошу прощения, если такая тема уже существует или существовала. Не смог...

Сравнение двух символьных массивов (char)
Здравствуйте. Подскажите пожалуйста... Есть программа по поиску слов из файла, в текстбокс...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.05.2013, 11:58

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Сравнение двух символьных массивов - char C++
Доброго времени суток! Столкнулся с проблемой кода программы. Мне нужно сравнить текст из файла...

СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++

Виртуальный метод
class A { virtual void Print()=0; } class B : public A { virtual void Print() {...

Виртуальный метод
Здравствуйте! Помогите, пожалуйста, найти ошибку в коде. #include &quot;stdafx.h&quot; class...


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

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

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