Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++]Иерархия классов. виртуальныe функции 
:(
    Опции темы
Infesta
Дата 19.5.2011, 03:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.11.2010

Репутация: нет
Всего: нет



Программа должна содержать:
Базовый класс Х, включающий два  элемента х1, х2 типа int, 
конструктор с параметрами для создания объектов в динамической области памяти, 
деструктор,
 виртуальные методы просмотра текущего состояния и переустановки объектов базового класса в новое состояние.
Производный класс У, включающий один элемент у типа int , 
конструктор с параметрами и  списком инициализаторов, передающий данные конструктору базового класса, 
переопределенные методы просмотра текущего состояния объектов и их пере-установки в новое состояние.
Создать в производном классе метод Run, определяющий :    Сумму квадратов компонент классов

Код

# include <iostream.h>
# include <conio.h>
# include <math.h>
# include <windows.h>
//------------------------------------------------------------------------------------------



class X    //базовый класс X
{
    public://открытые переменные
  int *x1,*x2;

    X()//конструктор new базового класса X
  {
  cout<<"работает конструктор базового класса X !"<<endl;
  x1=new int(1);
  x2=new int(2);
  cout<<"object created!"<<endl;
  };
  virtual void set()//виртуальная функция переустановки состояния
      {
      cout<<("работает виртуальная функция переустановки класса  X !")<<endl;
      cout<<("введите значение x1")<<endl;
      cin>>*x1;
      cout<<"x1="<<*x1<<endl;
      cout<<("введите значение x2")<<endl;
      cin>>*x2;
      cout<<"x2="<<*x2<<endl;
      };
  virtual void view()//виртуальная функция просмотра
      {
      cout<<("работает виртуальная функция просмотра класса X !")<<endl;
      cout<<"x1="<<*x1<<endl;
      cout<<"x2="<<*x2<<endl;
      };

    ~X()//деструктор delete базового класса X
  {
  cout<<("работает деструктор базового класса X !")<<endl;
  delete x1;
  delete x2;
  cout<<"object destroyed!"<<endl;
  };
};
//------------------------------------------------------------------------------------------
class Y : public X//производный класс Y от класса Х
{

    public://открытые переменные
  int *y;
  int *z;
    Y()//конструктор new производного класса Y
  {
  cout<<("работает конструктор базового класса Y !")<<endl;
  y=new int(3);
  z=new int(0);
  cout<<"object created!"<<endl;
  };
  void RUN(int,int,int,int);// метод класса RUN
  void view()//переопределенная функция просмотра
      {
      cout<<("работает переопределенная функция просмотра класса  Y !")<<endl;
      cout<<"y="<<*y<<endl;
      };
  void set()//переопределенная функция переустановки
      {
      cout<<("работает переопределенная функция переустановки класса Y !")<<endl;
      cout<<("введите значение y")<<endl;
      cin>>*y;
      cout<<"y="<<*y<<endl;
      };
    ~Y()//деструктор производного класса Y
  {
  cout<<("работает деструктор производного класса Y !")<<endl;
  delete y;
  delete z;
  cout<<"object destroyed!"<<endl;
  };
};
void Y::RUN(int a, int b, int c, int d)//реализация метода RUN
    {
    cout<<("работает метод RUN !")<<endl;
    a=*x1;
    b=*x2;
    c=*y;
    d=*z;
    //cout<<*x1<<endl;
    //cout<<*x2<<endl;
    cout<<"x1="<<a<<endl;
    cout<<"x2="<<b<<endl;
    cout<<"y="<<c<<endl;
    d = pow((a+b),2)+pow(c);
    cout<<"Rezultat z=(x1+x2)^2+y^2"<<d<<endl;
    }

помогите, не поняла как делать дальше, прочитала примеры, конспект, но не знаю что делать дальше. где-то напортачила
PM MAIL   Вверх
mrbrooks
Дата 19.5.2011, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 16
Всего: 306



Infesta, на мой взгляд вы недопоняли условие.
Я пологаю реализации должна быть все таки в этом русле:
Код

class X
{
public:
    X(void):x1(0), x2(0) {}
    X(int argX1, int argX2):x1(argX1), x2(argX2) {}
    ~X(void)    {}
    virtual void View()
    {
        std::cout << "x1: " << x1 << '\t' << "x2: " << x2 << std::endl;    
    }
    virtual void Set(int argX1, int argX2)
    {
        x1 = argX1;
        x2 = argX2;
    }
protected:
    int GetX1() const
    {
        return x1;
    }

    int GetX2() const
    {
        return x2;
    }
private:
    int x1, x2;
};

class Y: public X
{
public:
    Y(void):y(0){}
    Y(int argX1, int argX2, int argY):X(argX1, argX2)
    {
        y = argY;
    }
    ~Y(void) {}
    void View()
    {
        std::cout << "y: " << y << '\t';
        X::View();
    }
    void Set(int argX1, int argX2, int argY)
    {
        X::Set(argX1, argX2);
        y = argY;
    }
    void Run()
    {
        std::cout << "sum of squares: "<< (y*y + X::GetX1()*X::GetX1() + X::GetX2()*X::GetX2()) << std::endl;
    }
private:
    int y;
    void Set(int, int){}
};


юзинг:


Код

    Y *y = new Y(2, 2, 2);
    y->View();
    y->Run();
    y->Set(5, 5, 5);
    y->View();
    y->Run();
    delete y;


PM MAIL   Вверх
Infesta
Дата 19.5.2011, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.11.2010

Репутация: нет
Всего: нет



спасибо 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0686 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.