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)