1

私は独学で C++ を学ぼうとしている Java プログラマーです。最初に簡単な質問をする場合は、少し余裕を持ってください。

構造逆参照演算子がどのように機能するかを理解したいと思います。具体的には、次のコード行が明示的に何をしているのか誰か教えてもらえますか?

    if (elements[i]->test(arga, argb)) {}

test(arga,argb) は同じクラスのブール関数で、elements は element クラスのインスタンスのベクトルです。これは、私が興味を持っている上記の行をすぐに囲むコードです。

for (unsigned i = 0; i < elements.size(); ++i) {
    T arga = INFINITY, argb = INFINITY;
    //using namespace std;
    //std::cout >> elements[i] >> std::endl;
    //std::cout >> test(arga, argb) >> std::endl;
    if (elements[i]->test(arga, argb)) {
        //some code
    }
}

if 行は、 test(arga,argb) によって返されたブール値が要素クラスの特定のインスタンスの一部であるかどうかをテストしているようです。しかし、上記の cout 行を使用して elements[i] または test(arga,argb) の基になる値を公開しようとすると、それらの行をコメントアウトするまで、コンパイラはエラーをスローします。Javaでは、互いに対応するそれぞれの値が見つかるまでこれをいじることができ、コード行を理解できます。しかし、このコード行が C++ で何をしているのかを理解する方法がわかりません。誰かが私に明確な説明を与えることができますか?

4

3 に答える 3

0

多くの回答者が、回答する前にコードを提供する必要があると私に言ったので、コードをさらに詳しく調べて、次の行を示す何かを書き直しました。

if (elements[i]->test(arga, argb)) {}  

elements[i] の boolean メンバー関数が true かどうかを確認するテストです。

この文脈で -> の意味を識別するために私が書いた C++ プログラムは次のとおりです。

#include "stdafx.h"
#include <vector>
#include <string>
#include <iostream>

template<typename T>
class Bone
{
public:
    std::string myName;
    int mySize;
    Bone(const std::string &name, const int &size) : myName(name), mySize(size)
    {}
    bool isBigger(const int &testSize) const
    {
        if (testSize > mySize) return false;
        else return true;
    }
};

int main(int argc, char **argv)
{
    std::vector<Bone<float> *> bones;
    // name, location, size
    bones.push_back(new Bone<float>("femur", 10));
    bones.push_back(new Bone<float>("ulna", 4));
    bones.push_back(new Bone<float>("maxilla", 3));

    int testSize = 6;
    // test each bone to see if it is bigger than testSize
    for (unsigned i = 0; i < bones.size(); ++i) {
        if (bones[i]->isBigger(testSize)) {
            std::cout << bones[i]->myName; std::cout << " is bigger than testSize! " << std::endl;
        }
    }

    while (!bones.empty()) {
        Bone<float> *thisBone = bones.back();
        bones.pop_back();
        delete thisBone;
    }
    return 0;
}

これを理解するように導いてくれたすべての人に感謝します。

于 2013-06-24T09:18:06.867 に答える