User Tools

Site Tools


programming:cpp:class

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
programming:cpp:class [2022/04/18 09:03]
odagawa
programming:cpp:class [2022/05/25 08:01] (current)
odagawa
Line 11: Line 11:
 #ifndef MYCLASS_HPP #ifndef MYCLASS_HPP
 #define MYCLASS_HPP #define MYCLASS_HPP
 +
 +#include <cstddef>
 +
 +#include <boost/functional/hash.hpp>
  
 class MyClass { class MyClass {
Line 20: Line 24:
   bool operator<(const MyClass &rhs) const;   bool operator<(const MyClass &rhs) const;
      
-  friend std::size_t has_value(const MyClass &obj) {+  friend std::size_t hash_value(const MyClass &obj) {
     std::size_t h = 0;     std::size_t h = 0;
     boost::hash_combine(h, obj.var1);     boost::hash_combine(h, obj.var1);
Line 46: Line 50:
 </code> </code>
  
-stream の定義+また,デバッグなどでクラス中身を見たい場合に出力ストリームをオーバーロードしておくと便利.\\ 
 +<del>自分は使わなかったが,入力ストリームをオーバーロードすれば,テキストファイルから一括で入力することも可能になる気がする.</del>\\ 
 +実際に使ってみたらできた.\\ 
 +入出力ストリームの例は以下の通り. 
 + 
 +<code cpp MyClass.hpp> 
 +#ifndef MYCLASS_HPP 
 +#define MYCLASS_HPP 
 + 
 +#include <iostream> 
 + 
 +class MyClass { 
 +public :  
 +  int var1; 
 +  double var2; 
 +   
 +  friend std::ostream &operator<<(std::ostream &os, const MyClass &obj); 
 +  friend std::istream &operator>>(std::istream &is, MyClass &obj); 
 +   
 +}; 
 + 
 +</code> 
 + 
 +<code cpp MyClass.cpp> 
 +#include "MyClass.hpp" 
 + 
 +#include <iostream> 
 + 
 +std::ostream &operator<<(std::ostream &os, const MyClass &obj) { 
 +  os << "Integer value : " << obj.var1 << "\n" 
 +     << "Double value : " << obj.var2 << "\n"; 
 +      
 +  return os; 
 +
 + 
 +std::istream &operator>>(std::istream &is, MyClass &obj) { 
 +  is >> obj.var1 >> obj.var2; 
 +  return is; 
 +
 + 
 +</code> 
 + 
 +''operator=='' を定義したら,どうせ == と != はちょうど逆の出力をする以外ないはずなので\\ 
 +自動的に ''operator!=''定義してほしい.\\ 
 +テンプレートを使うと上手くいくらしく,グローバルなヘッダーに以下を書いておく. 
 +<code cpp> 
 + 
 +template<class T, class F = decltype(!(std::declval<T>()==std::declval<T>()))> 
 +F operator!=(T a, T b) { 
 +  return !(a==b); 
 +
 + 
 +</code> 
programming/cpp/class.1650272613.txt.gz · Last modified: 2022/04/18 09:03 by odagawa