Member 12959299 Ответов: 3

Как я могу получить результат с помощью оператора return ?


I have  a simple querry here.

First the exercise:-
Create a class called Triangle that stores the length of the base and height of a right triangle in two private instance variables. Include a constructor that sets these values. Define a function area( ) which returns the area of the triangle.


Что я уже пробовал:

#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
class triangle
{
private:
double length,height;
double ar;
public:
triangle(double l, double h);
double area();
};
triangle::triangle(double l, double h)
{
length=l;
height=h;
}
double triangle::area()
{
ar=(length*height)/2;
return ar;

}
main()
{
double l,h;
clrscr();
cout<<"enter length of the base of the right angled triangle: ";
cin>>l;
cout<<"\nenter height the right angled triangle: ";
cin>>h;
triangle o(l,h);
o.area();
getch();
}



/*When I replace "return ar" with  "cout<<ar"; it shows correct result. 

But in the exercise, it tells me to use the return statement. How can I get the result with the return statement ? i.e. I want to use the return statement. */

NotPolitcallyCorrect

Окей.....
двойной уголок = о.уголок();

3 Ответов

Рейтинг:
5

CPallini

Как и предполагали другие, значение, возвращаемое вашими функциями, доступно в main функция.
Обратите внимание, что вам не нужна переменная-член ar, это зависимая величина (обычно неразумно использовать избыточную информацию).

#include <iostream>
using namespace std;

class triangle
{
private:
  double length, height;
public:
 triangle(double l, double h):length(l), height(h){}
  double area();
};

double triangle::area()
{
  return (length*height)/2;
}

int main()
{
  double l, h;
  cout<<"enter length of the base of the right angled triangle: ";
  cin >> l;
  cout << endl <<"enter height the right angled triangle: ";
  cin >> h;
  triangle o(l,h);
  cout << endl << "the area of the triangle is " << o.area() << endl;
}


nv3

Очень полезная подсказка!

Stefan_Lang

Отлично.
Однако я не согласен с идеей не использовать промежуточные переменные, даже если они избыточны: во-первых, компилятор обычно устраняет тривиальную избыточность такого рода в режиме "выпуска"; во-вторых, эти избыточные переменные могут быть большим подспорьем для анализа состояния вашей программы при отладке.

Раньше я записывал формулы на бумаге (а позже и в программах), используя только минимум промежуточных значений. Но со временем я понял, что, хотя промежуточные значения могут быть избыточными, это очень помогает читабельности и пониманию. То же самое относится и к вызовам цепочек функций и разыменованию: это может помочь проверить, действительно ли промежуточные результаты действительны, прежде чем их передадут в следующую операцию.

CPallini

Спасибо.
Что ж, использование избыточных значений-тоже дело личного вкуса. Всякий раз, когда существует сохраненное зависимое значение, Существует также потенциальная опасность выхода из синхронизации. Однако я признаю его отладочную полезность. Другое возможное использование избыточных значений, конечно, для повышения скорости выполнения. Однако я считаю такой сценарий немного "продвинутым". Поэтому мое простое правило для начинающих - "избегайте избыточных переменных".

Member 12959299

Спасибо мистеру Паллини, что ответил Мне во второй раз.

Member 12959299

Да, сбивает с толку новичка

CPallini

Добро пожаловать.

Рейтинг:
23

Albert Holguin

Метод возвращает что-то, если вы хотите его использовать, захватите его с помощью локальной переменной указанного прототипом типа.

main()
{
double l,h;
clrscr();
cout<<"enter length of the base of the right angled triangle: ";
cin>>l;
cout<<"\nenter height the right angled triangle: ";
cin>>h;
triangle o(l,h);
double ar = o.area();
//do something with ar variable
getch();
}


Member 12959299

Спасибо Мистер Ольгин

Рейтинг:
19

Daniel Pfeffer

Ваш треугольник:: площадь() метод работает правильно; это ваш главный() функция, которая имеет проблему,

В линии

o.area();
вы вычисляете значение, а затем ничего с ним не делаете. Все, что вам нужно сделать, это изменить его на
double a = o.area();
Это вызовет треугольник:: площадь(), и присвоить результат 'a'.

Что вы будете делать с " а " потом, зависит только от вас.


Member 12959299

Спасибо Мистер Пфеффер