OOP(객체 지향 프로그래밍)에 대한 질문 - 페이지 3

 
tara :

추가하다.

나는 추가 ))
 
EverAlex :

원의 경우 한 가지 방법으로, 정사각형의 경우 다른 방법으로 계산됩니다. 하지만 어쨌든 - Figura.GetSquare() 를 호출하여 ,

예를 들어, 이론을 공부하고, 예를 보여주고, 함수가 원, 정사각형, 사다리꼴 또는 삼각형을 결정하는 방법을 설명하는 것이 어렵습니다 ???
 
그리고 침묵...
 
VOLDEMAR :
그리고 침묵...

글쎄, 그것은 2x2=?와 같은 질문이었다.

답변에 관심이 없습니다.

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

어쩌면 더 가깝습니다.

클래스에는 Open(), Close(), Read(), Write() 등의 표준 가상 메서드 집합이 있습니다.

이 클래스는 파일, 매핑, 채널, 인터넷 등으로 작업할 수 있습니다.

이러한 방법의 채우기(설명)만 다릅니다. 그러나 클래스 인터페이스는 동일할 것입니다.

 

그것이 이미 주제의 세 번째 페이지이고 아무도 예제로 한 줄의 코드를 제공하지 않았다는 것이 의심스럽지 않습니까 ???

게다가 답도 재미없고 기초적인데 너무 간단해서 코딩하기 너무 귀찮아서...

누군가가 뭔가를 알고 있다면 그들이 대답 할 것이라고 생각합니다 ...

 

VOLDEMAR , 첫 번째 게시물을 작성하는 경우 클래스가 있는 이유는 무엇입니까? 클래스 작성은 프로그램의 복잡성의 결과입니다. 개별 요소에 많은 외부 링크가 있는 경우 이러한 모든 요소를 결합하고 간단한 인터페이스를 생성하는 클래스가 생성됩니다. 제 생각에는 클래스의 필수 속성은 데이터(ints, doubles ...) - 함수가 작동하는 재료, 클래스는 모든 것을 하나의 패키지(데이터 및 함수)로 묶습니다. 이것이 ​앗. 예를 들어 두 가지 예가 있습니다. 첫 번째는 oop가 없고 두 번째는 oop이 있습니다.

 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());   // какое-то действие с нашей суммой.
}

두 번째 예에서는 함수가 작동할 데이터에 대해 걱정할 필요가 없습니다. 이것이 OOP의 주요 목표라고 생각합니다.

 
두 번째 방법에서 많은 오류와 경고가 발생하는 이유는 무엇입니까?
 

아, 그리고 코드에 대해 한 가지 더:

...
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;
}

결과적으로 동일한 포인터에 대해 삭제가 두 번 호출됩니다. 이대로가 맞을거야

 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;}
};

저것들. 소멸자를 작성해야 하는 경우 신중하게 생각해야 합니다. Opera.= 및 복사 생성자로 무엇을 해야 할까요? 삭제, 쓰기...? 소멸자를 비워 쓸 가치가 없다고 생각합니다. 소멸자가 없다는 것은 위의 작업을 다시 수행하는 것이 무의미하다는 표시입니다.

 
VOLDEMAR :
두 번째 방법에서 많은 오류와 경고가 발생하는 이유는 무엇입니까?

이 뒤에 -> 대신 점을 넣으십시오. 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) { }

왜 기호(:)이며 이 기호로 무엇을 얻을 수 있습니까?