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

Вопрос по классам и функциям - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Реверс строки через итераторы http://www.cyberforum.ru/cpp-beginners/thread351945.html
std::string s="123456"; s.replace(s.begin(),s.end(),s.rbegin(),s.rend()); std::cout<<s<<std::endl; Почему-то работает правильно и не падает. Если предположить наиболее быструю реализацию метода replace(а, b, m, n) с четырьмя итераторами, то мне кажется д.б. 1. Определение увеличения или уменьшения размера строки 2.a увеличение размера строки и перемещение хвоста [b,end[, ИЛИ 2.b...
C++ error C2664 Помогите пожалуйста исправить ошибку : ошибка: Ошибка 1 error C2664: void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...): невозможно преобразовать параметр 1 из "const char " в "const wchar_t *" c:\documents\visual studio 2010\projects\lines\lines\linesview.cpp 211 строка: str.Format("%d balls, %d points", pDoc->m_iNumOfBalls, pDoc->m_iNumOfPoints); объявление: ... http://www.cyberforum.ru/cpp-beginners/thread351924.html
C++ Помогите пожалуйста по Одномерному массиву длинных целых чисел!!!
Здравствуйте!!! Помогите пожалуйста решение задачи!!! Одномерный массив длинных целых чисел Задание №1 Составить программу определения среднего значения для увеличивающегося количества чисел заданного типа. Исходные значения, для которых рассчитывается среднее, хранятся в массиве. Затем к исходным значениям добавляются от одного и более новых чисел. Для полученного нового ряда чисел...
C++ Работа с zip
Хотелось бы сделать мини обработчик zip архивов для своих нужд, который бы редактировал все zip архивы что найдёт в папке. Ну из возможностей нужна возможность редактирования txt файлов внутри zip архива и перепаковка архива (извлечение всех файлов из архива и создание нового архива с содержимым папки). Хотя может это я многого хочу, но всё же есть ли что простенькое в освоении и справляющееся с...
C++ Дано действительное число a. Для функции f(x) вычислить f(a) http://www.cyberforum.ru/cpp-beginners/thread351917.html
Дано действительное число a. Для функции f(x) вычислить f(a). Решите пожалуйста. Заранее благодарен.
C++ Вывод на печать Спроектируйте и отладьте программу, осуществляющую ввод массива деталей с указанием шифра детали, ее цены и количества данного шифра деталей, а также осуществляющую формирование и вывод платежной ведомости на печатающее устройство с указанием стоимости деталей каждого типа и итоговой суммы за весь массив деталей // сиппо4.cpp : Defines the entry point for the console application. // ... подробнее

Показать сообщение отдельно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16937 / 5342 / 328
Регистрация: 30.03.2009
Сообщений: 14,366
Записей в блоге: 26
16.09.2011, 12:18     Вопрос по классам и функциям
Цитата Сообщение от Razzeeyy Посмотреть сообщение
Evg, только я там что то не увидел наследования...
Забыл написать Я ж просто схематично в воздухе рисовал

Цитата Сообщение от Razzeeyy Посмотреть сообщение
ругается компилятор, но теперь очень экзотично
В базовом классе надо создать тело method'а, а там в моём варианте только описание

Добавлено через 26 секунд
А... в #21 посте всё уже написано

Добавлено через 2 минуты
Только до сути дела ты пока не вник. Весь интерес в концовке:

C++
1
2
3
4
5
6
7
8
9
void call_method (the_class *p)
{
  p->method();
}
 
...
 
call_method (&cat);
call_method (&monkey);
Т.е. после создания экземпляра класса мы указатель преобразуем к указателю на базовый тип и далее нам уже не интересна детализация класса. Мы со всеми производными классами работаем одинаково (через указатель на базовый класс), в точке использования знаем лишь то, что у нас есть method, но не знаем, как он реализован в производных классах. Это и есть главный смысл виртуальности и именно то, что ты хотел получить в самом первом посте. Только технически это делается через тип, а не через экземпляр

Добавлено через 2 минуты
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
#include <iostream>
using namespace std;
 
class the_class
{
  public:
  virtual void method (void){}
};
 
class class_cat: public the_class // ты у себя забыл написать public при наследовании
{
  public:
  virtual void method (void)
  {
    cout << "method for the_class_cat\n";
  }
};
 
class class_monkey: public the_class // ты у себя забыл написать public при наследовании
{
  public:
  virtual void method (void)
  {
    cout << "method for the_class_monkey\n";
  }
};
 
class_cat cat;
class_monkey monkey;
 
void call_method (the_class *p)
{
  // Здесь мы работаем с базовым классом, не зная о том, как конкретно
  // будет работать method для нашего экземпляра
  p->method();
}
 
int main()
{
  call_method (&cat);
  call_method (&monkey);
}
Добавлено через 7 минут
В качестве задания можешь попробовать создать следующую систему. Класс "фигура", содержит виртуальный метод "нарисовать по таким-то координатам". Производные классы "квадрат" и "круг", переопределяют виртуальный метод. Далее создать массив указателей на экземпляры "фигура" (понятное дело, туда подложить круги и квдраты) и далее этот массив отобразить на экран по рандомным координатам, работая, разумеется, строго как с "фигурой".

Т.е. у тебя есть как бы библиотека, которая поставляет "фигуру" и некие утилиты к ней (в нашем случае это прорисовать массив фигур). А есть пользовательская программа, которая на базе "фигуры" создаёт "квадрат" и "круг" и далее пользуется кодами из библиотек, а сама программа делает только минимум вещей
 
Текущее время: 13:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru