#c #function #inline
#c #функция #встроенный
Вопрос:
функция calculation () не работает, когда я создаю функцию input() вне класса … это как-то связано со встроенной функцией??
#include <iostream>
using namespace std;
class price
{
public:
int pen;
int rubber;
int scale;
void input()
{
cout<<"enter the variablesn";
cin>>pen>>rubber>>scale;
cout<<"n"<<pen<<" "<<rubber<<" "<<scale;
}
};
void calculate(price p)
{
int rate[2],total;
rate[0]=p.pen*5;
rate[1]=p.rubber*3;
rate[2]=p.scale*4;
total=rate[0] rate[1] rate[2];
cout<<"n"<<total;
}
int main()
{
price a,b,c;
a.input();
calculate(a);
return 0;
}
Комментарии:
1.
int rate[2]
это массив из 2 элементов, но вы пытаетесь получить доступ к 3 элементам. Это неопределенное поведение (и вам вообще не нужен этот массив).2. В дополнение к тому, что говорит Иксисарвинен, не очевидно, почему вы вообще решили использовать массив. Что не так с более простым кодом
total = p.pen*5 p.rubber*3 p.scale*4;
? Нет причин добавлять массив в это вычисление3. Что именно вы подразумеваете под «не работает»?
4. смотрите, мой вопрос заключается в том, что .. в пользовательском fn .. вся выделенная ему память стирается после завершения выполнения, и это то, что я ожидал, что мой fn сделает. Но calculate() может получить доступ к переменным input() . Это не ведет себя таким образом, когда я создаю input () вне класса, потому что в этом случае ..calculate не смог получить доступ к внутренним переменным ввода. Ранее я думал, что это как-то связано со свойством функции-члена экземпляра, которое делает ее встроенной функцией .. но я не уверен.
Ответ №1:
Нет, у нас нет. inline
вообще не влияет на семантику функции C . Это влияет только на то, как эта функция обрабатывается компоновщиком.
Комментарии:
1. смотрите, мой вопрос заключается в том, что .. в пользовательском fn .. вся выделенная ему память стирается после завершения выполнения, и это то, что я ожидал, что мой fn сделает. Но calculate() может получить доступ к переменным input() . Это не ведет себя таким образом, когда я создаю input () вне класса, потому что в этом случае ..calculate не смог получить доступ к внутренним переменным ввода. Ранее я думал, что это как-то связано со свойством функции-члена экземпляра, которое делает ее встроенной функцией .. но я не уверен.пожалуйста, помогите
2. @AnveK Я предполагаю, что вы говорите о
pen
,rubber
иscale
переменных. Это переменные класса . Они объявлены вprice
классе и поэтому они не стираются при завершенииinput
функции. Вместо этого удаляются только при удаленииa
переменной, а посколькуa
объявлена вmain
, это происходит только при выходеmain
и завершении программы.3. @AnveK Единственные переменные, которые удаляются при
input
завершении, — это переменные, которые объявлены вinput
, но в вашем коде нет переменных, объявленных вinput
, поэтому ничего не стирается.