Явный вызов деструктора в классе

144
22 апреля 2022, 00:20
#include <iostream>
using std::cout;
using std::endl;
class Function
{
protected:
    double x;
public:
    Function(double x) {
        this->x = x;
    }
    double GetX() {
        return this->x;
    }
    void SetX() {
        cout << "Enter x:" << endl;
        std::cin >> this->x;
    }
    double valueIn() {
        return 2 * x + 3; 
    }
    void show() {
        cout << valueIn() << endl;
    }
};
class Hyperbola: public Function 
{
private:
    double k;
    Hyperbola(double x,double k): Function(x) {
        this->x = x;
        if (this->x == 0) {
            cout << "x can't be zero" << endl;
            //тут явный вызов деструктора
        }
    }
    double valueIn(){
        return 5 / x;
    }
};
int main() {
    return 0;
}

У меня есть класс Function и Hyperbola, который наследует Function. Поскольку формула гиперболы k / x, то делаю проверку x == 0 и в случае, если х==0 удаляю этот объект. Как мне явно вызвать деструктор в классе?

Answer 1

В конструкторе класса наверное лучше всего бросить исключение

class Hyperbola: public Function 
{
private:
    double k;
    Hyperbola(double x,double k): Function(x) {
        if (this->x == 0) {
            throw "x can't be zero";
        }
        this->x = x;
    }
    double valueIn(){
        return 5 / x;
    }
};

P.S.

кстати, а зачем вам этот код в конструкторе:

this->x = x;

если это и так происходит в родителе

: Function(x)
READ ALSO
Почему меняется тип объекта? (виртуальная функция)

Почему меняется тип объекта? (виртуальная функция)

Есть родительский класс command и два дочерних - movement и rootЗаголовочный файл:

90
Ряды в C++, помогите с задачкой, пожалуйста

Ряды в C++, помогите с задачкой, пожалуйста

Не могу понять, как можно реализовать это (если можно, попробуйте объяснить мне, как все нужно делать):

115
Почему зацикливается программа на C++?

Почему зацикливается программа на C++?

Дана строка SВывести символ L, который встречается наибольшее число раз

169