как ссылаться на 3 функции при использовании struct

0

//Я хочу использовать 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;
}
  • 1
    Дать rectangle в качестве параметра для функций? ...
  • 0
    В функции rec2 вы используете rec2 переменные для определения области. Если вы инициализировали переменные в своем конструкторе, функция rec2 всегда возвращает одно и то же значение.
Теги:

3 ответа

0
Лучший ответ

Вам нужно добавить методы к вашей структуре 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()
}

Теперь методы могут ссылаться на переменные-члены структуры.

0

Каждый раз, когда вы возвращаете новый 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;
}
0

Я предлагаю вам изменить свой дизайн.
Поместите функции ввода, обработки и вывода в виде методов внутри структуры rectangle.

Размещение функций внутри структуры позволяет им получить доступ к элементам данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню