Hoge.h


#ifndef HOGE_H_
#define HOGE_H_
 
#include <string>
 
class Hoge {
public:
  Hoge();
  Hoge(const Hoge&);
  Hoge(std::string& name); // コピーコンストラクタ
  virtual ~Hoge();
  std::string& GetName();
  void SetName(std::string& name);
private:
  std::string name_;
};
 
#endif /* HOGE_H_ */

Hoge.cpp


#include "Hoge.h"
#include <iostream>
 
Hoge::Hoge() {
  std::cout << "Hoge::Hoge()" << std::endl;
}
 
Hoge::Hoge(const Hoge& hoge) {
  std::cout << "Hoge::Hoge(const Hoge& hoge)" << std::endl;
  this->name_ = hoge.name_;
}
 
Hoge::Hoge(std::string& name) : name_(name) {
  std::cout << "Hoge::Hoge(std::string& name)" << std::endl;
}
 
Hoge::~Hoge() {
  std::cout << "Hoge::~Hoge()" << std::endl;
}
 
std::string& Hoge::GetName() {
  std::cout << "std::string& Hoge::GetName()" << std::endl;
  return this->name_;
}
 
void Hoge::SetName(std::string& name) {
  std::cout << "Hoge::SetName(std::string& name)" << std::endl;
  this->name_ = name;
}

main.cpp


#include <iostream>
#include "Hoge.h"
 
int main() {
  std::string hello = "hello";
  std::string goodbye = "goodbye";
 
  std::cout << "----- h1 -----------------------" << std::endl;
  Hoge h1;
  h1.SetName(hello);
  std::cout << h1.GetName() << std::endl;
 
  std::cout << "----- h2 -----------------------" << std::endl;
  Hoge h2(goodbye);
  std::cout << h2.GetName() << std::endl;
 
  std::cout << "----- h3 -----------------------" << std::endl;
  Hoge h3 = h1; // コピーコンストラクタが呼び出される
  std::cout << h3.GetName() << std::endl;
 
  std::cout << "----- h4 -----------------------" << std::endl;
  Hoge h4 = Hoge(h2); // コピーコンストラクタが呼び出される
  std::cout << h4.GetName() << std::endl;
  return 0;
}

実行結果。


----- h1 -----------------------
Hoge::Hoge()
Hoge::SetName(std::string& name)
std::string& Hoge::GetName()
hello
----- h2 -----------------------
Hoge::Hoge(std::string& name)
std::string& Hoge::GetName()
goodbye
----- h3 -----------------------
Hoge::Hoge(const Hoge& hoge)
std::string& Hoge::GetName()
hello
----- h4 -----------------------
Hoge::Hoge(const Hoge& hoge)
std::string& Hoge::GetName()
goodbye
Hoge::~Hoge()
Hoge::~Hoge()
Hoge::~Hoge()
Hoge::~Hoge()

tags: c++

Posted by NI-Lab. (@nilab)