3

私はC++を学んでいて、int型は単なる既成のクラスであることを学びました。だから多分私はそれを作成しようとすべきだと思いました。

私がやりたいのは基本的にintの通常のクラスです

int x;
x=7;
cout << x;

//出力は画面上で7です。

同様に...

abc x;
x=7;
cout << x;

何を入れますか

class abc{
\\ HERE!!!!!! 
};

だから私はこれを行うことができました

class SomeClass {
public:
    int x;

    SomeClass(int x) {
        this->x = x;
    }
};

int main(int argc, char *argv[]) {
    SomeClass s = 5;

    cout << s.x << "\n"; // 5

    s = 17;

    cout << s.x << "\n"; // 17

    return 0;
}

しかし、ご覧のとおり、値を出力するにはsxを使用する必要があります。「s」を使用したいだけです。私は実験としてそれをやっています、私はこの方法がどのように良いか悪いか、無意味か革命的であるか、またはできないかについて聞きたくありません。一度やったことを覚えています。しかし、私が完全には理解しておらず、忘れていたコードをコピーして貼り付けるだけでした。

4

5 に答える 5

6

そして、int、typesは単なる既成のクラスであることを学びました

これは完全に誤りです。それでも、(ほぼ)すべての演算子をオーバーロードできるため、式でのクラスの動作を完全に制御できます。ここで欠落しているのは、次のoperator<<場合に呼び出される通常のオーバーロードです。

cout<<s;

次のように作成できます。

std::ostream & operator<<(std::ostream & os, const SomeClass & Right)
{
    Os<<Right.x;
    return Os;
}

詳細については、演算子のオーバーロードに関するFAQを参照してください。

于 2012-09-26T20:27:58.670 に答える
2

abc次のテンプレートクラスのように、クラスでキャスト演算子をintに、代入演算子をintから定義する必要があります。

template <class T>
class TypeWrapper {
public:
  TypeWrapper(const T& value) : value(value) {}
  TypeWrapper() {}
  operator T() const { return value; }
  TypeWrapper& operator (const T& value) { this->value = value; return *this; }
private:
  T value;
};

int main() {
  TypeWrapper<int> x;
  x = 7;
  cout << x << endl; 
}
于 2012-09-26T22:17:38.717 に答える
2

operator<<次のように、クラスをオーバーロードする必要があります。

class abc
{
public:
    abc(int x) : m_X(x) {}

private:
    int m_X;

    friend std::ostream& operator<<(std::ostream& stream, const abc& obj);  
};

std::ostream& operator<<(std::ostream& os, const abc& obj)
{
    return os << obj.m_X;
}

保護された/プライベートのメンバーにアクセスしたい場合を除いてfriend、過負荷になる必要はありません。operator<<

于 2012-09-26T20:28:10.473 に答える
1

<< と >> は基本的に関数名です。クラスにそれらを定義する必要があります。+、-、* および他のすべての演算子と同じです。方法は次のとおりです。

http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html

于 2012-09-26T20:26:07.110 に答える
0

出力演算子をオーバーロードしたい:

std::ostream& operator<< (std::ostream& out, SomeClass const& value) {
    // format value appropriately
    return out;
}
于 2012-09-26T20:27:45.017 に答える