Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++]Иерархия классов. виртуальныe функции


Автор: Infesta 19.5.2011, 03:42
Программа должна содержать:
Базовый класс Х, включающий два  элемента х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;
    }

помогите, не поняла как делать дальше, прочитала примеры, конспект, но не знаю что делать дальше. где-то напортачила

Автор: mrbrooks 19.5.2011, 10:27
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;


Автор: Infesta 19.5.2011, 12:30
спасибо 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)