Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Операции над строкой. Подсчитать количество слов, которое начинается с той буквы, которой заканчивается предыдущее слово https://www.cyberforum.ru/ cpp-beginners/ thread854051.html
Дано предложение, слова в нем разделены пробелами. Подсчитать количество слов, которое начинается с той буквы, которой заканчивается предыдущее слово. Если таких слов больше половины, то их...
C++ Как переделать на консоль?
данная задача сделано в форме, нужно чтоб все тодже самое, считалось в консоли //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop ...
Вычисление дискриминанта C++
Вроди простая программа но почему то работает некоректно не пойму в чем причина С++ #include "stdafx.h" #include <iostream> #include <string> #include <windows.h> #include <fstream> #include...
C++ Error: jump to case label Здравствуйте. Не один раз встречался с такой ошибкой. Сам не знаю, что она означает, но выправлял я ее с помощью if вместо switch - case. Так вот: здесь уже так у меня не получиться так исправить.... https://www.cyberforum.ru/ cpp-beginners/ thread854041.html
C++ Дерево результатов футбольных соревнований https://www.cyberforum.ru/ cpp-beginners/ thread854027.html
Нужно сделать дерево результатов футбольных соревнований. В моем случае это футбол. Турнир должен выглядеть как Лига Чемпионов. Групповой этап, плей-офф и финал. Голы, которые забили команды, должны...
Построить класс для управления базой данных колекции марок. Используйте следующие поля класса: C++
Построить класс для управления базой данных колекции марок. Используйте следующие поля класса: char stamp_title; //название коллекции char country; // название страны марки int...
Создайет класс служащие объектом которого будет C++
Создайет класс Employee(служащие) объектом которого будет Age (возраст) и Salary(зарплата). Создайте объекты Ivanov и Petrov.Задайте значения членов-данных этих объектов и выведите их на печать
C++ Построить класс для управления базой данных колекции книг. используйте следующие поля класса Построить класс для управления базой данных колекции книг. используйте следующие поля класса: char book_title; //название книги char group; // фамилия автора int count_of_page; // ... https://www.cyberforum.ru/ cpp-beginners/ thread854020.html
C++ Эффективный алгоритм поиска простых чисел на С++ https://www.cyberforum.ru/ cpp-beginners/ thread854013.html
Хотел написать функцию которая вычисляет простое число или сложное, но оно не вычисляется. Цикл который я добавил в функцию не работает. Можете подсказать почему??? Заранее спасибо. Простое число -...
C++ Вывести значение логического выражения, заданного в виде строки S. Выражение определяется следующим образом («T» — True, «F» — False): <выражение> : помогите пожалуйста решить задачку на рекурсию Вывести значение логического выражения, заданного в виде строки S. Выражение определяется следующим образом («T» — True, «F» — False): <выражение> ... https://www.cyberforum.ru/ cpp-beginners/ thread853990.html
4 / 4 / 1
Регистрация: 05.09.2012
Сообщений: 41
0

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

03.05.2013, 11:58. Просмотров 711. Ответов 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
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.