Что такое фрейм стека, когда два объекта одного класса работают с одной и той же переменной-членом?
У меня есть несколько вопросов по приведенному ниже примеру кода :
#include <iostream> using namespace std; class Example { int a; public: void setval(int x); int addval(Example &ex); }; void Example::setval(int x) { a=x; } int Example::addval(Example &ex) { int c; c=ex.a+a; return c; } int main() { Example obj1,obj2; int sum; obj1.setval(10); obj2.setval(20); sum=obj1.addval(obj2); cout<<" the sum is :"<<sum<<endl; }
Output : $g++ -o main *.cpp $main the sum is :30
Вопросы:
1> Когда выполняется строка sum=obj1.addval(obj2);, как выглядит стек функций?
1.a> При вызове addval(obj2) с помощью obj1 содержит ли стек obj1.addval адрес памяти переменной obj2.a ?
2> какова область действия переменной c ?
3> является ли c переменной-членом ?
Что я уже пробовал:
Если я не смог четко сформулировать свой вопрос, пожалуйста, скажите об этом.
Заранее благодарю вас за ваши ответы.
С уважением!
Gerry Schmitz
Это не "нормальные" вопросы для "новичка". К чему ты клонишь? Это что, домашнее задание?
out0FBox
Просто программист на Си, пробирающийся в ООП. Интересуюсь внутренней работой.
out0FBox
Я предполагаю, что объекты имеют собственный стек, где у них есть копия членов класса, так же как функции имеют собственный стек, содержащий локальные переменные.
Если объекты хранятся в куче, мне придется пересмотреть вопрос. Любые предложения помогут.