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:18]
odagawa
programming:cpp:class [2022/05/25 08:01] (current)
odagawa
Line 51: Line 51:
  
 また,デバッグなどでクラスの中身を見たい場合に出力ストリームをオーバーロードしておくと便利.\\ また,デバッグなどでクラスの中身を見たい場合に出力ストリームをオーバーロードしておくと便利.\\
-自分は使わなかったが,入力ストリームをオーバーロードすれば,テキストファイルから一括で入力することも可能になる気がする.\\ +<del>自分は使わなかったが,入力ストリームをオーバーロードすれば,テキストファイルから一括で入力することも可能になる気がする.</del>\\ 
-例は以下の通り.+実際に使ってみたらできた.\\ 
 +入出力ストリームの例は以下の通り.
  
 <code cpp MyClass.hpp> <code cpp MyClass.hpp>
 #ifndef MYCLASS_HPP #ifndef MYCLASS_HPP
 #define MYCLASS_HPP #define MYCLASS_HPP
 +
 +#include <iostream>
  
 class MyClass { class MyClass {
Line 64: Line 67:
      
   friend std::ostream &operator<<(std::ostream &os, const MyClass &obj);   friend std::ostream &operator<<(std::ostream &os, const MyClass &obj);
 +  friend std::istream &operator>>(std::istream &is, MyClass &obj);
      
 }; };
Line 71: Line 75:
 <code cpp MyClass.cpp> <code cpp MyClass.cpp>
 #include "MyClass.hpp" #include "MyClass.hpp"
 +
 +#include <iostream>
  
 std::ostream &operator<<(std::ostream &os, const MyClass &obj) { std::ostream &operator<<(std::ostream &os, const MyClass &obj) {
Line 77: Line 83:
            
   return os;   return os;
 +}
 +
 +std::istream &operator>>(std::istream &is, MyClass &obj) {
 +  is >> obj.var1 >> obj.var2;
 +  return is;
 } }
  
 </code> </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.1650273513.txt.gz · Last modified: 2022/04/18 09:18 by odagawa