ClassAnatomy.h, ClassAnatomy.cpp, ClassAnatomy.txt, Code folder, Classes webpage

Illustrates all of the basic parts of a class, e.g., Constructors, operators, destructor, and member data.

ClassAnatomy.cpp

#include "TestClass.h"
#include "..\Helpers\Helpers.h"
#include <iostream>
#include <string>
#include <vector>
#include <memory>

//----< default constructor >----------------------------------------------

Test::Test()
{
  std::cout << "\n  void construction of \"Test\"";
  name_ = "Test";
}
//----< promotion constructor >--------------------------------------------

Test::Test(const std::string& name)
{
  name_ = name;
  std::cout << "\n  named construction of \"" << name_ << "\"";
}
//----< reset instance name string >---------------------------------------

std::string rename(const std::string& prefix, const std::string& sourceName)
{
  if (prefix != sourceName.substr(0, 4))
    return prefix + " of " + sourceName;
  else
    return sourceName;
}
//----< copy constructor >-------------------------------------------------

Test::Test(const Test& t) : name_(t.name_) 
{
  std::cout << "\n  copy of \"" << name_ << "\"";
  name_ = rename("copy", t.name_);
}
//----< move constructor >-------------------------------------------------

Test::Test(Test&& t) : name_(std::move(t.name_))
{
  std::cout << "\n  move of \"" << name_ << "\"";
  t.name_ = "been moved";   // copies chars, so inefficient, but shows how move works
  name_ = rename("move", t.name_);
}
//----< copy assignment operator >-----------------------------------------

Test& Test::operator=(const Test& t)
{
  std::cout << "\n  copy assignment of \"" << name_ << "\"";
  if (this != &t)
  {
    name_ = rename("copy", std::move(t.name_));
  }
  return *this;
}
//----< move assignment operator >-----------------------------------------

Test& Test::operator=(Test&& t)
{
  if (this != &t)
  {
    name_ = rename("move", std::move(t.name_));
    t.name_ = "been moved";  // copys chars, so inefficient, but shows how move works
    std::cout << "\n  move assignment of \"" << name_ << "\"";
  }
  return *this;
}
//----< destructor >-------------------------------------------------------

Test::~Test()
{
  std::cout << "\n  destruction of \"" << name_ << "\"";
}
//----< name "property" >--------------------------------------------------

std::string& Test::name()
{
  return name_;
}
//----< enunciator >-------------------------------------------------------

void Test::say()
{
  std::cout << "\n  my name is \"" << name_ << "\"";
}