// Ex8_01.cpp
// Class with an explicit destructor
#include <iostream>
using std::cout;
using std::endl;
class CBox // Class definition at global scope
{
public:
// Destructor definition
~CBox()
{
cout << "Destructor called." << endl;
}
// Constructor definition
explicit CBox(double lv = 1.0, double wv = 1.0, double hv = 1.0) :
m_Length{ lv }, m_Width{ wv }, m_Height{ hv }
{
cout << "Constructor called." << endl;
}
// Function to calculate the volume of a box
double volume() const
{
return m_Length*m_Width*m_Height;
}
// Function to compare two boxes which returns true
// if the first is greater than the second, and false otherwise
bool compare(const CBox* pBox) const
{
if (!pBox)
returnfalse;
returnthis->volume() > pBox->volume();
}
private:
double m_Length; // Length of a box in inches
double m_Width; // Width of a box in inches
double m_Height; // Height of a box in inches
};
// Function to demonstrate the CBox class destructor in action
int main()
{
CBox boxes[5]; // Array of CBox objects defined
CBox cigar {8.0, 5.0, 1.0}; // Define cigar box
CBox match {2.2, 1.1, 0.5}; // Define match box
CBox* pB1 {&cigar}; // Initialize pointer to cigar object address
CBox* pB2 {}; // Pointer to CBox initialized to nullptr
cout << "Volume of cigar is " << pB1->volume() << endl;
pB2 = boxes; // Set to address of array
boxes[2] = match; // Set 3rd element to match
cout << "Volume of boxes[2] is " << (pB2 + 2)->volume() << endl;
system("pause");
return 0;
}
Your actual problem is that you do let the console/terminal to close at the end of the program. The program does write output but that does not take long and the window closes so quickly that you simply have no time to see/read all of the output.
* Open a console and run program(s) there, "on command line". The console is not for the program and therefore won't close.
* Somehow rig the console to stay open even after program is completely over. Perhaps some IDE supports that.
* Redirect the standard output of the program into a file. The console will show nothing. The redirection is easy "on command line" (where you would not need it anyway).
int main()
{
{ //<---
CBox boxes[5]; // Array of CBox objects defined
CBox cigar {8.0, 5.0, 1.0}; // Define cigar box
CBox match {2.2, 1.1, 0.5}; // Define match box
CBox* pB1 {&cigar}; // Initialize pointer to cigar object address
CBox* pB2 {}; // Pointer to CBox initialized to nullptr
cout << "Volume of cigar is " << pB1->volume() << endl;
pB2 = boxes; // Set to address of array
boxes[2] = match; // Set 3rd element to match
cout << "Volume of boxes[2] is " << (pB2 + 2)->volume() << endl;
} //<--- the boxes die here
system("pause");
return 0;
}
Thank you all. I had suspected that the destructor executed but did not know why the output was not printed on screen. I even put in scoping brackets but put them in the wrong place. Thank you, ne555.