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

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

Войти
Регистрация
Восстановить пароль
 
VitaliyH
4 / 4 / 0
Регистрация: 05.09.2012
Сообщений: 41
#1

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

03.05.2013, 11:58. Просмотров 534. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2013, 11:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Наследование, виртуальный метод просмотра, метод (сравнение символьных массивов) (C++):

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

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

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

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

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

Виртуальный метод - C++
Здравствуйте! Помогите, пожалуйста, найти ошибку в коде. #include &quot;stdafx.h&quot; class Person{ protected: char *name; ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2013, 11:58
Привет! Вот еще темы с ответами:

Указатель на виртуальный метод - C++
По мотивам какого-то вопроса тут возник вопрос, ответ на который я что-то не придумал. Как взять указатель на метод базового класса, если...

Вывести на экран виртуальный метод - C++
Как вывести на экран виртуальный метод?

Класс работник. Виртуальный метод - C++
Здраствуйте! Надо ввести работников с почасовой ЗП и фиксированной ЗП. Написать виртуальный метод для подсчета ЗП( для почасовиков -...

Вызвать виртуальный метод элемента вектора - C++
class Parent { public: Parent(); virtual void fn(); } class Child: public Parent { public


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

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

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