Bird
Raised Fist0
C++programming~10 mins

Object interaction in C++ - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Object interaction
Create Object A
↓
Create Object B
↓
Object A calls method on Object B
↓
Object B processes and returns result
↓
Object A uses result
↓
End
This flow shows how one object creates or accesses another object, calls its method, and uses the returned result.
Execution Sample
C++
#include <iostream>

class Printer {
public:
  void printMessage() { std::cout << "Hello from Printer!\n"; }
};

class Manager {
  Printer printer;
public:
  void start() { printer.printMessage(); }
};

int main() {
  Manager mgr;
  mgr.start();
  return 0;
}
Manager object calls a method on its Printer object to print a message.
Execution Table
StepActionObject InvolvedMethod CalledOutput
1Create Manager objectManagerConstructor
2Manager creates Printer object internallyPrinterConstructor
3Manager calls start()Managerstart()
4start() calls printer.printMessage()PrinterprintMessage()
5printMessage() outputs messagePrinterprintMessage()Hello from Printer!
6start() finishesManagerstart()
7main() finishesmain
💡 Program ends after main() returns 0
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
mgr (Manager object)noneexistsexists with printer objectexists with printer objectexists with printer object
printer (Printer object inside Manager)nonenoneexistsexistsexists
Key Moments - 3 Insights
Why does Manager have a Printer object inside it?
Because Manager creates Printer as a member variable (see step 2 in execution_table), so it can call its methods directly.
When Manager calls start(), how does the message get printed?
start() calls printer.printMessage() (step 4), which outputs the message (step 5).
Does main() directly call printMessage()?
No, main() calls mgr.start() (step 3), and start() calls printMessage().
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, at which step does the Printer object get created?
AStep 2
BStep 1
CStep 3
DStep 4
💡 Hint
Check the 'Action' column for when Printer is created.
At which step does the message "Hello from Printer!" first appear in the output?
AStep 4
BStep 5
CStep 3
DStep 6
💡 Hint
Look at the 'Output' column for when the message is printed.
If Manager did not have a Printer object, what would happen when start() tries to call printMessage()?
AIt would print the message anyway.
BThe program would crash at runtime.
CThere would be a compile error because printer does not exist.
DNothing would happen.
💡 Hint
Think about object existence before method calls, see variable_tracker for printer.
Concept Snapshot
Object interaction means one object uses another object's methods.
Objects can be members inside other objects.
One object calls methods on another to get work done.
This is done by creating objects and calling their methods.
Example: Manager has Printer; Manager calls Printer's printMessage().
Full Transcript
This example shows how objects interact in C++. First, a Manager object is created. Inside Manager, a Printer object is created as a member variable. When Manager's start() method is called, it calls the printMessage() method on its Printer object. This prints the message "Hello from Printer!" to the screen. The main function creates a Manager and calls start(), which triggers the message printing. The execution table traces each step: creating objects, calling methods, and outputting text. The variable tracker shows how the Manager and Printer objects exist through the program. Key moments clarify why Manager has Printer inside and how method calls flow. The quiz tests understanding of object creation, method calls, and what happens if an object is missing. This helps beginners see how objects work together in a simple program.

Practice

(1/5)
1. What does it mean when one object calls a method on another object in C++?
easy
A. The first object is asking the second object to perform an action.
B. The first object copies the second object's data.
C. The first object deletes the second object.
D. The first object creates a new object inside the second object.

Solution

  1. Step 1: Understand method calls between objects

    When one object calls a method on another, it requests that object to do something or provide information.
  2. Step 2: Differentiate from other actions

    Copying data, deleting, or creating objects are different operations, not the same as calling a method.
  3. Final Answer:

    The first object is asking the second object to perform an action. -> Option A
  4. Quick Check:

    Object method call = request action [OK]
Hint: Method call means asking another object to do something [OK]
Common Mistakes:
  • Confusing method call with copying data
  • Thinking method call deletes objects
  • Assuming method call creates new objects inside others
2. Which of the following is the correct syntax to pass an object obj of class Car to a method drive of another object driver?
easy
A. driver.drive(obj);
B. drive.driver(obj);
C. driver->drive(obj);
D. drive(obj).driver;

Solution

  1. Step 1: Identify correct method call syntax

    For an object driver, calling method drive with argument obj uses dot notation: driver.drive(obj);
  2. Step 2: Eliminate incorrect syntax

    drive.driver(obj); reverses object and method, driver->drive(obj); is for pointers, and drive(obj).driver; is invalid.
  3. Final Answer:

    driver.drive(obj); -> Option A
  4. Quick Check:

    Object.method(argument) = driver.drive(obj) [OK]
Hint: Use object.method(argument) syntax for calling methods [OK]
Common Mistakes:
  • Using arrow operator on non-pointer objects
  • Swapping method and object names
  • Incorrect punctuation or order
3. What is the output of this code?
#include <iostream>

class Light {
public:
    void turnOn() { std::cout << "Light is ON" << std::endl; }
};

class Switch {
public:
    void press(Light &l) { l.turnOn(); }
};

int main() {
    Light roomLight;
    Switch wallSwitch;
    wallSwitch.press(roomLight);
    return 0;
}
medium
A. Compilation error
B. Light is OFF
C. No output
D. Light is ON

Solution

  1. Step 1: Understand method call inside press()

    The press method calls turnOn() on the passed Light object, which prints "Light is ON".
  2. Step 2: Trace main function calls

    wallSwitch.press(roomLight); calls turnOn() on roomLight, so output is "Light is ON".
  3. Final Answer:

    Light is ON -> Option D
  4. Quick Check:

    Method call prints "Light is ON" [OK]
Hint: Method calls inside other methods print output [OK]
Common Mistakes:
  • Assuming no output because press() returns void
  • Confusing reference passing with copying
  • Thinking code causes compilation error
4. Identify the error in this code snippet:
#include <iostream>

class Engine {
public:
    void start() { std::cout << "Engine started" << std::endl; }
};

class Car {
public:
    void ignite(Engine e) { e.start(); }
};

int main() {
    Engine myEngine;
    Car myCar;
    myCar.ignite(myEngine);
    return 0;
}
medium
A. Method start() is not declared correctly.
B. Car class should inherit from Engine.
C. Passing Engine by value causes unnecessary copying.
D. Cannot call start() on Engine object.

Solution

  1. Step 1: Analyze parameter passing in ignite()

    The method ignite takes Engine e by value, which copies the object unnecessarily.
  2. Step 2: Suggest improvement

    Passing by reference (Engine &e) avoids copying and is more efficient.
  3. Final Answer:

    Passing Engine by value causes unnecessary copying. -> Option C
  4. Quick Check:

    Pass objects by reference to avoid copying [OK]
Hint: Pass objects by reference to avoid copies [OK]
Common Mistakes:
  • Thinking method start() is incorrect
  • Assuming inheritance is required
  • Believing start() cannot be called on Engine
5. Given classes Teacher and Student, how can you design a method in Teacher that lets a teacher assign a grade to a student object? Choose the best approach.
hard
A. Make Student inherit from Teacher and override a grade method.
B. Define a method in Teacher that takes a Student reference and an int grade, then calls a Student method to set the grade.
C. Store grades only inside Teacher without involving Student objects.
D. Use global variables to store grades for all students.

Solution

  1. Step 1: Understand object interaction for assigning grades

    The Teacher should interact with Student by calling a method on Student to set the grade, passing the grade value.
  2. Step 2: Evaluate options

    Define a method in Teacher that takes a Student reference and an int grade, then calls a Student method to set the grade. correctly uses a method in Teacher that takes a Student reference and grade, then calls Student's method to set the grade. Other options misuse inheritance, ignore object interaction, or use bad global state.
  3. Final Answer:

    Define a method in Teacher that takes a Student reference and an int grade, then calls a Student method to set the grade. -> Option B
  4. Quick Check:

    Teacher calls Student method to assign grade [OK]
Hint: Teacher calls Student method with grade parameter [OK]
Common Mistakes:
  • Misusing inheritance for unrelated roles
  • Ignoring encapsulation by using globals
  • Storing grades only in Teacher without Student update
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard