Помогите реализовать перегрузку оператора деления

Есть объекты параллелограмм и трапеция. В каждом объекте есть методы вычисления площади, которые, собственно, эту площадь и возвращают. Нужно перегрузить оператор деления(/), чтобы при делении объекта параллелограмм на объект трапецию(или наоборот) возвращало результат деления их площадей.

1)Класс параллелограмм

#include "Cpoint.h"
#include "Trapezium.h"
#include <iostream>
#include <string>
using namespace std;

class Parallelogram : public Cpoint
{
public:

    void Show();

    double CountSquareP();

    double operator /(Trapezium T);

    Parallelogram(double bs, double H);
    Parallelogram();
    ~Parallelogram();

private:
    double baseSide;
    double height;
};
double Parallelogram::CountSquareP() {
    return baseSide * height;
}

//Данный код возвращает ошибку: "Синтаксическая ошибка: идентификатор Trapezium"
double Parallelogram::operator/(Trapezium T)
{
    return this->CountSquareP() / T.CountSquareT();
}

2)Класс трапеция

#pragma once
#include "Cpoint.h"
#include "Parallelogram.h"
class Trapezium : public Cpoint
{
public:

    void Show();

    double CountSquareT();


    Trapezium(double bs1, double bs2, double tH);
    Trapezium();
    ~Trapezium();

private:
    double baseSide1;
    double baseSide2;
    double tHeight;
};

double Trapezium::CountSquareT() {
    return (baseSide1 + baseSide2) / 2 + tHeight;
}

3) Тестовый код

#include "stdafx.h"
#include "Parallelogram.h"
#include "Trapezium.h"
#include <iostream>
using namespace std;


int main()
{
    setlocale(LC_ALL, "russian");
    Parallelogram para(5, 5);
    Trapezium trap(3, 3, 3);

    cout << para / trap;



    system("pause");
    return 0;
}

Примерно так:

double operator / (const Parallelogram &p, const Trapezium &t) {
    return p.CountSquareP() / t.CountSquareT();
}

double operator / (const Trapezium &t, const Parallelogram &p) {
    return t.CountSquareT() / p.CountSquareP();
}

Если бы классы были унаследованы от одного абстрактного класса, который имеет метод, например, double getArea(), то можно было бы обойтись одной перегрузкой.

В таком случае возникает ряд ошибок, а именно:
1)Ошибка C2804 бинарный «operator /» имеет слишком много параметров
2)Ошибка C2662 double Parallelogram::CountSquareP(void): невозможно преобразовать указатель «this» из «const Parallelogram» в «Parallelogram &»
3)Ошибка C2676 бинарный «/»: «Parallelogram» не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору

Эти перегруженные операторы не должны быть членами класса.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.