Я попытался вызвать функцию из другого класса, и результат искажен

#c

#c

Вопрос:

я новичок в c и пытаюсь вызвать функцию класса в другом, но результат просто не получается правильно. Я неоднократно пытался рассчитать общую стоимость по разным областям, но результат всегда искажался. я думаю, что я это объявил? Это мой код:

 #include<iostream>
#include<math.h>
#include<stdlib.h>
#include<iomanip>
#include<numeric>
#include<conio.h>
using namespace std;
class RoomDimension
{
public:
        double width;
        double length;
        double area;
        double getarea(void);
        
    void room(int,int);
};
double RoomDimension::getarea()
{
    return area;
}
class RoomCarpet: public RoomDimension
{
    public:
double costpermeter;
double totalcost=0;
double gettotalcost(void);
void calculation();
};
double RoomCarpet ::gettotalcost()
{
    return totalcost;
}
void RoomDimension::room(int n, int m)
{
    RoomCarpet rc;
    cout<<"Number of rooms= ";
    cin>>m;
    if(m<1)
    {
        cout<<"Invalid input."<<endl;
    }
    for (n = 0;n < m;  n)
    {
        cout<<"Length of the room= ";
        cin>>length;
        if(length==0)
        {
            cout<<"Invalid input.";
            return;
        }
        cout<<"Width of the room= ";
        cin>>width;
        if(width==0)
        {
            cout<<"Invalid input.";
            return;
        }
        area=width*length;
        cout<<"Area of the room= "<<area<<endl;
        rc.calculation();
}
    return;
}
void RoomCarpet::calculation()
{
    RoomDimension rd;
    totalcost=0;
    cout<<"Price per square meter= ";
    cin>>costpermeter;
    if(costpermeter==0)
    {
        cout<<"Invalid input."<<endl;
        return;
    }
    double totalcost=costpermeter*rd.area;
    cout<<"Total price= RM"<<totalcost<<endl;
    return;
}
int main()
{
    RoomDimension rd;
    rd.room(0,0);
    return 0;
}
  

и результат продолжает отображаться следующим образом

  Number of rooms= 2
Length of the room= 5
Width of the room= 4
Area of the room= 20
Price per square meter= 5
Total price= RM5.03097e-317
Length of the room= 3
Width of the room= 7
Area of the room= 21
Price per square meter= 7
Total price= RM7.04336e-317
  

что я должен сделать, чтобы это исправить?

Комментарии:

1. В вашем коде говорится: «ковер — это своего рода измерение» и «измерение — это вещь, которая может создавать ковры», ни один из которых не имеет для меня особого смысла.

Ответ №1:

Когда я компилирую ваш код с использованием MSVC, я получаю два предупреждения и ошибку:

  • строка 29: Предупреждение C26495 Переменная ‘RoomCarpet::costpermeter’ неинициализирована. Всегда инициализируйте переменную-член (тип.6).
  • строка 76: предупреждение C6001 об использовании неинициализированной памяти ‘rd’.
  • строка 76: ошибка C4700 используется неинициализированная локальная переменная ‘rd’

Особенно последнее является проблемой

В функции RoomCarpet::calculation вы допускаете (как минимум) две ошибки:

  • вы объявляете локальную переменную rd , которая никогда не инициализируется.
  • вы объявляете и используете локальную переменную totalcost , которая скрывает член класса Roomcarpet::totalcost .

Но эта проблема также возникает в RoomDimension::room , где вы начинаете с объявления локальной переменной rc , но вы никогда ничего ей не присваиваете. Когда вы затем вызываете rc.calculation(); , вы выполняете вычисления для переменных без знака.

Вам следует переосмыслить свой дизайн. Почему RoomCarpet производная от RoomDimension ?