//Я хочу использовать 3 функции здесь с 1 структурой, что одна функция выполняет входную, а другая для вычисления, а другая для вывода, но я не знаю, как ссылаться//на переменные в функциях rec2 и rec3. Я хочу сделать это без использования указателя
struct rectangle {
float length;
float width;
float area,perimeter;
};
rectangle rec1();
rectangle rec2();
rectangle rec3();
int main(){
rectangle f;
f = rec1();
f=rec2();
f = rec3();
return 0;
}
rectangle rec1(){
rectangle h;
cout<<"insert the length: ";
cin>>h.length;
cout<<"\ninsert width: ";
cin>>h.width;
return h;
}
rectangle rec2(){
rectangle z;
z.area=z.length*z.width;
z.perimeter=2*(z.length+z.width);
return z;
}
rectangle rec3(){
rectangle x;
cout<<"\narea is: "<<x.area<<endl<<"perimeter is: "<<x.perimeter<<endl;
return x;
}
Вам нужно добавить методы к вашей структуре rectangle
.
struct rectangle
{
float length, width, area, perimeter;
void Input()
{
cout << "insert the length: ";
cin >> length;
cout << "\ninsert width: ";
cin>> width;
}
void Process(); // etc
void Output(); // etc
};
// Create a rectangle object and call it methods
int main()
{
rectangle r;
r.Input();
r.Process();
r.Output()
}
Теперь методы могут ссылаться на переменные-члены структуры.
Каждый раз, когда вы возвращаете новый rectangle
и назначаете его переменной f
, вы переписываете все члены f
, а не только те, которые вы модифицировали внутри функции. Вместо этого вам нужно изменить функции для изменения f
. Вам не нужно использовать указатель для этого, вместо этого вы можете использовать ссылку:
struct rectangle {
float length;
float width;
float area, perimeter;
};
void rec1(rectangle&);
void rec2(rectangle&);
void rec3(rectangle&);
int main(){
rectangle f;
rec1(f);
rec2(f);
rec3(f);
return 0;
}
void rec1(rectangle &r){
cout << "insert the length: ";
cin >> r.length;
cout << endl << "insert width: ";
cin >> r.width;
}
void rec2(rectangle &r){
r.area = r.length * r.width;
r.perimeter = 2 * (r.length + r.width);
}
void rec3(rectangle &r){
cout << endl << "area is: " << r.area << endl << "perimeter is: " << r.perimeter << endl;
}
Но это C++, о котором мы говорим, после всего. Методы участников - ваши друзья :)
struct rectangle {
float length;
float width;
float area, perimeter;
void rec1();
void rec2();
void rec3();
};
void rectangle::rec1(){
cout << "insert the length: ";
cin >> length;
cout << endl << "insert width: ";
cin >> width;
}
void rectangle::rec2(){
area = length * width;
perimeter = 2 * (length + width);
}
void rectangle::rec3(){
cout << endl << "area is: " << area << endl << "perimeter is: " << perimeter << endl;
}
int main(){
rectangle f;
f.rec1();
f.rec2();
f.rec3();
return 0;
}
Я предлагаю вам изменить свой дизайн.
Поместите функции ввода, обработки и вывода в виде методов внутри структуры rectangle
.
Размещение функций внутри структуры позволяет им получить доступ к элементам данных.
rectangle
в качестве параметра для функций? ...rec2
вы используетеrec2
переменные для определения области. Если вы инициализировали переменные в своем конструкторе, функцияrec2
всегда возвращает одно и то же значение.