Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2013, 09:41   #1
Мортира
 
Регистрация: 18.04.2013
Сообщений: 7
По умолчанию Реализовать функции

Используя виртуальную функцию, реализовать функции, вычисляющие объемы: правильной пирамиды, параллелепипеда, призмы, усеченной пирамиды.
Подскажите алгоритм выполнения программы.
Мортира вне форума Ответить с цитированием
Старый 19.04.2013, 11:45   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Подскажите алгоритм выполнения программы.
Код:
Body *b = new Pyramid(12, 15);
std::cout << b->Volume();
delete b;
b = new Parallelepiped(4, 7, 6);
std::cout << b->Volume();
delete b;
Примерно так выглядит вызывающая виртуальные функции программа.
Abstraction вне форума Ответить с цитированием
Старый 19.04.2013, 12:33   #3
Мортира
 
Регистрация: 18.04.2013
Сообщений: 7
По умолчанию

Код:
#include <stdafx.h>
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <cmath>
using namespace std;

//Класс описывающий правильную пирамиду:
class CPyramid
{
      protected:
	  int h, a;//объем, высота и длина сторон
      public:
//Конструктор:
      CPyramid (int _h=5, int _a=4)
	  {h = _h; a =_a; }
	  int GetX() {return h;}
	  virtual double Volume() //Вирутальная функция вычисляющая объем правильной пирамиды
	  
	   {
		   return 1/2 * (h * a^2);
	   }
};

Body *b = new Pyramid(12, 15);
std::cout << b->Volume();
delete b;
b = new Parallelepiped(4, 7, 6);
std::cout << b->Volume();
delete b;
скажите куда эту виртуальные функции поставить?
Мортира вне форума Ответить с цитированием
Старый 19.04.2013, 12:49   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Мортира

Используя виртуальную функцию, реализовать функции, вычисляющие объемы: правильной пирамиды, параллелепипеда, призмы, усеченной пирамиды.
Подскажите алгоритм выполнения программы.


Тебе нужно создать иерархию классов, с использованием полиморфизма

Код:
class Fig
{
public:
   virtual ~Fig() {};
   virtual size_t Volume() const = 0;
};
в наследниках определяешь реализацию функции Volume, например

Код:
class Point : public Fig
{
public:
    virtual size_t Volume() const { return 0; } 
};
и т.д.
Rififi вне форума Ответить с цитированием
Старый 19.04.2013, 12:49   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
скажите куда эту виртуальные функции поставить?
Я понятия не имею, что Вы знаете о виртуальных функциях, а рассказывать с нуля - выходит слишком много текста. Поэтому вкратце: должен быть базовый класс (Body в моём примере), который объявляет виртуальную функцию Volume(). Есть классы конкретных фигур, которые наследуются от этого базового класса и переопределяют Volume(). Тогда можно в программе объявить указатель на базовый класс и присвоить ему указатель на некоторый производный (в моём примере он создаётся с помощью new, но можно и создать "нормальный" объект и взять его адрес). После этого, вызов Volume() по этому указателю вызовет функцию того класса, на который этот указатель реально указывает. Так, в моём примере два раза вызывается b->Volume(), но первый раз вызовется Pyramid::Volume(), а второй - Parallelepiped::Volume(), хотя вызывающий код выглядит одинаково.

Код, само собой, должен быть в некоторой функции, вызываемой в ходе выполнения программы; в простейшем случае в main.
Abstraction вне форума Ответить с цитированием
Старый 19.04.2013, 13:00   #6
Мортира
 
Регистрация: 18.04.2013
Сообщений: 7
По умолчанию

Можете написать начало проги ?
Мортира вне форума Ответить с цитированием
Старый 19.04.2013, 14:00   #7
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Можете написать начало проги ?
Я очевидным образом не понимаю вопроса. Какой именно программы? У Вас в первом сообщении нет описания какой-либо программы; применяя аналогию, вместо "напишите сочинение о кошках" задано "напишите предложение, содержащее деепричастный оборот".
Код:
int main(void){
Вот начало программы.
Abstraction вне форума Ответить с цитированием
Старый 19.04.2013, 14:39   #8
Мортира
 
Регистрация: 18.04.2013
Сообщений: 7
По умолчанию

Используя виртуальную функцию, реализовать функции, вычисляющие объемы: правильной пирамиды, параллелепипеда, призмы, усеченной пирамиды.
Вот само задание. С чего надо начать?
Мортира вне форума Ответить с цитированием
Старый 19.04.2013, 15:04   #9
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
С чего надо начать?
Цитата:
Я понятия не имею, что Вы знаете о виртуальных функциях, а рассказывать с нуля - выходит слишком много текста. Поэтому вкратце: должен быть базовый класс (Body в моём примере), который объявляет виртуальную функцию Volume(). Есть классы конкретных фигур, которые наследуются от этого базового класса и переопределяют Volume().
Если так непонятно - читайте используемый Вами учебник, раздел о виртуальных функциях.
Abstraction вне форума Ответить с цитированием
Старый 19.04.2013, 15:15   #10
Мортира
 
Регистрация: 18.04.2013
Сообщений: 7
По умолчанию

так помогите написать начало дальше сам попробую
Мортира вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализовать в виде функции нахождение суммы арифметической прогрессии Ruska95 Общие вопросы C/C++ 2 13.11.2012 13:01
Реализовать программу нахождения и построения временной функции переходного процесса ildar28 Помощь студентам 4 29.03.2012 10:37
Как подменить адрес возврата функции func на адрес функции f используя переполнение буфера buf и функции gets dmitrii6120 Помощь студентам 6 14.11.2011 20:10
реализовать построение R-функции isus Помощь студентам 7 14.06.2009 17:21