Вопросы по ООП (Объектно Ориентированному Программированию ) - страница 3

 
tara:

Добавьте.

я добавил ))
 
EverAlex:

Для круга вычисляется одним способом, для квадрата - другим. Но в любом случае - вызвав Figura.GetSquare(),

Мне например тяжело изучать теорию, продемонстрируйте пример, и распишите как функции определит круг, квадрат, трапецию, или треугольник ???
 
И тишина ...
 
VOLDEMAR:
И тишина ...

Ну, это вопрос был типа 2х2=?.

Неинтересно отвечать.

=================

Может так ближе.

Есть стандартный набор виртуальных методов в классе: Open(), Close(), Read(), Write() и т.п.

Такогй класс может работать с файлами, маппингом, каналами, интернетом и т.п.

Отличаться будет только начинка (описание) этих методов. Но интерфейс класса будет одинаков.

 

Вам не кажется подозрительным что уже 3я страница по теме а еще никто ни сточки кода в пример не привел ???

Кроме, не интересно отвечать, это элементарно, это на столько просто что лень кодить...

Если б кто то что то знал, я думаю ответил бы...

 

VOLDEMAR, если взять ваш первый пост, зачем там вообще класс? Написание классов это следствие усложнения программы, когда у отдельных элементов возникает множество внешних связей, тогда создается класс объединяющий все эти элементы и создающий простой интерфейс. На мой взгляд, необходимым атрибутом класса являются данные (int'ы, double'ы ...) - материал с которым работают функции, класс связывает все в один пакет(данные и функции).Я думаю, это основная идея ООП. Например, два примера, первый без ооп, второй с ним:

void sum(int &i1, int &i2, int val)
{
    i1 += val;
    i2 += val;
}
int get_number(int &i1, int &i2)
{
    return i1 + i2;
}
void main()  // главная функция программы
{
    int i1, i2;
    sum(i1, i2, 56);
    any_fn(get_number(i1, i2));   // какое-то действие с нашей суммой.
}
class QQ
{
    int i1;
    int i2;
public:
    void sum(int val)
    {
        this->i1 += val;
        this->i2 += val;
    }
    int get_number()
    {
        return this->i1 + this->i2;
    }
};

void main()  // главная функция программы
{
    QQ q;
    q.sum(56);
    any_fn(q.get_number());   // какое-то действие с нашей суммой.
}

Во втором примере нам не надо париться о данных с которыми будут работать функции, думаю в этом основная цель ООП.

 
Почему второй метод высыпает кучу ошибок и предупреждений ???
 

Ну и еще по вашему коду замечание:

...
class vr_trade
  {
   ...
                    ~vr_trade(){}
  };
...

У меня правило: никогда не писать деструктор пустым. Отсутствие деструктора - индикатор простоты класса. Если написан деструктор, то возможно придется писать копирующий конструктор и оператор = или запретить их. Пример:

struct S {};
class QQ
{
    S *p;
public:
    QQ() {this->p = new S;}
    ~QQ() {delete this->p;}
};
void main()
{
    QQ q;
    QQ q2 = q;
}

В результате для одного и того же указателя будет вызван delete дважды. Правильным было бы так

class QQ
{
    S *p;
public:
    QQ() {this->p = new S;}
    ~QQ() {delete this->p;}
    QQ(QQ &);            // Только объявляем, определения нигде нет.
    QQ &operator=(QQ &); // Только объявляем, определения нигде нет.
};

//или
class QQ
{
    S *p;
public:
    QQ() {this->p = new S;}
    ~QQ() {delete this->p;}
    QQ(QQ &q)               {this->p = new S(*q.p);}
    QQ &operator=(QQ &q)    {*this->p = *q.p;}
};

Т.е. если пришлось написать деструктор, то это повод хорошо подумать - что делать с опер.= и копирующем конструктором? Удалить, написать ...? Писать деструктор пустым думаю не стоит, его отсутствие это индикатор ненужности переделывать вышеназванное.

 
VOLDEMAR:
Почему второй метод высыпает кучу ошибок и предупреждений ???

После this поставьте точку вместо ->. mql фишка.
 

Обьясните пожалуйста действия

struct complex
  {
   double            re; // действительная часть
   double            im; // мнимая часть
   //--- конструкторы
                     complex():re(0.0),im(0.0) {  }
                     complex(const double r):re(r),im(0.0) {  }
                     complex(const double r,const double i):re(r),im(i) {  }
                     complex(const complex &o):re(o.re),im(o.im) { }
   //--- арифметические операции
   complex           Add(const complex &l,const complex &r) const;  // сложение
   complex           Sub(const complex &l,const complex &r) const;  // вычитание
   complex           Mul(const complex &l,const complex &r) const;  // умножение
   complex           Div(const complex &l,const complex &r) const;  // деление
  };

а именно

                     complex():re(0.0),im(0.0) {  }
                     complex(const double r):re(r),im(0.0) {  }
                     complex(const double r,const double i):re(r),im(i) {  }
                     complex(const complex &o):re(o.re),im(o.im) { }

зачем знак (:) и что мы этим знаком получаем ?

Причина обращения: