Құрылымның ауытқу операторы қалай жұмыс істейді?

Мен C ++-ды оқытуға тырысатын Java-программистімін. Мен алдымен қарапайым сұрақтарды сұрасам, маған біраз уақыт жұмсалмаңыз.

Мен құрылымның ауытқу операторының қалай жұмыс істейтінін түсінгім келеді. Нақтырақ айтсақ, біреу кодты төмендегі сызықтың нақты терминдерінде не айтқанын біле ме?

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

test (arga, argb) - бұл сол сыныптағы логикалық функция, ал элементтер элемент сыныбының даналарының векторы. Міне, мені қызықтыратын жоғарыдағы сызықты дереу қоршап тұрған код:

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
    }
}

Егер логика тесті (арка, argb) арқылы қайтарылған логикалық элемент сынып элементтерінің берілген данасының бөлігі болып табылатынын тексеру үшін сыналған болса керек. Бірақ элементтердің негізгі мәндерін [i] немесе тестті (arga, argb) жоғарыдағы cout сызықтарымен ашуға тырысқанда, компилятор осы сызықтарды түсіндірмейінше қателерді тастайды. Java-де, бір-бірімен сәйкес келетін әрбір мәнді тапқанша, мен онымен сиқыршы болар едім, содан кейін код сызығын түсіндім. Бірақ C ++-де осы кодтың кодын қалай анықтау керектігін білмеймін. Біреу маған нақты түсініктеме бере алады ма, жақсырақ сілтеме немесе екі сілтеме арқылы онлайн режимінде қолданады?

0
Әрқайсыңыздың көмегіңізге рахмет. Мен кіріп, тереңірек зерттеп, әрқайсыңыздың не айтқанын ойластырған кезде, мен оны кейінірек зерттеймін. Ал әзірше, кез-келген күнге дейін көмектесуге тырысқандардың бәріне +1.
қосылды автор CodeMed, көзі
@AndreyT Мен дүйсенбіде осыған тереңірек кіремін, осылайша мен өзара тиімді қарым-қатынасты қамтамасыз ете аламын. Бұл ұзақ демалыс.
қосылды автор CodeMed, көзі
@AndreyT Мен дүйсенбіде осыған тереңірек кіремін, осылайша мен өзара тиімді қарым-қатынасты қамтамасыз ете аламын. Бұл ұзақ демалыс.
қосылды автор CodeMed, көзі
@AndreyT Мен дүйсенбіде осыған тереңірек кіремін, осылайша мен өзара тиімді қарым-қатынасты қамтамасыз ете аламын. Бұл ұзақ демалыс.
қосылды автор CodeMed, көзі
elements туралы декларацияны көрсете аласыз ба?
қосылды автор juanchopanza, көзі
@syam дұрыс, бірақ C ++-де пайдаланушы анықтаған түрлер үшін деформациялық операторларды анықтауға болады. Сондықтан сіз шынымен сұрайтын нәрсені түсіну үшін elememts дегеннің не екенін білу керек және ол қандай көрсеткішке ие болса, соны біледі.
қосылды автор juanchopanza, көзі
@CodeMed: Қайтадан, элементтерінің хабарландыруы қайда? C ++ жүйесінде elements дегенді білмей-ақ сіздің сұрағыңызға жауап берудің ешқандай маңызды жолы жоқ.
қосылды автор AnT, көзі
Сіз түсінуге көмектесу үшін: C ++-де біз бірдей заттармен жұмыс істемейтіндіктен -> және . бөліп аламыз. (Көрсеткіш және қарапайым объект және/немесе сілтеме). Бірақ сізді Java тәжірибеңізбен байланыстыру үшін сіз негізінен -> дегенді . аударуға болады. элементтері [i] .test (arga, argb) . Бірақ C ++-нің құндылық пен анықтаманың арасындағы айырмашылықты жасайтынын есте сақтаңыз, ал Java-де бәрі сілтеме болып табылады.
қосылды автор syam, көзі

9 жауаптар

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

Егер мәлімдемені бұзсаңыз, солдан оңға қарай оқып шығыңыз, біз төменде келтіреміз:

  1. access the ith element in an array (or array-like) entity named elements

  2. the element accessed (elements[i]) is a pointer to an object

  3. call the member-function named test on elements[i] and pass it two arguments; arga and argb

if we disregard the fact that you wrote std::cout >> instead of std::cout << (the latter is the correct form), we end up with two reasons for your described errors:

  1. your compiler complains about std::cout << element[i] because no suitable overload is found to handle an entity of the type of element[i] and an std::ostream& (which is the underlying type of std::cout).

  2. your compiler complains about std::cout << test (arga, argb) because there is no function in scope named test that takes two arguments corresponding to arga, argv. test, in your snippet, is a member-function that belongs to an entity, it's not callable by its own.

3
қосылды
elements[i]->test (arga, argb)

Егер мәлімдемені бұзсаңыз, солдан оңға қарай оқып шығыңыз, біз төменде келтіреміз:

  1. access the ith element in an array (or array-like) entity named elements

  2. the element accessed (elements[i]) is a pointer to an object

  3. call the member-function named test on elements[i] and pass it two arguments; arga and argb

if we disregard the fact that you wrote std::cout >> instead of std::cout << (the latter is the correct form), we end up with two reasons for your described errors:

  1. your compiler complains about std::cout << element[i] because no suitable overload is found to handle an entity of the type of element[i] and an std::ostream& (which is the underlying type of std::cout).

  2. your compiler complains about std::cout << test (arga, argb) because there is no function in scope named test that takes two arguments corresponding to arga, argv. test, in your snippet, is a member-function that belongs to an entity, it's not callable by its own.

3
қосылды
elements[i]->test (arga, argb)

Егер мәлімдемені бұзсаңыз, солдан оңға қарай оқып шығыңыз, біз төменде келтіреміз:

  1. access the ith element in an array (or array-like) entity named elements

  2. the element accessed (elements[i]) is a pointer to an object

  3. call the member-function named test on elements[i] and pass it two arguments; arga and argb

if we disregard the fact that you wrote std::cout >> instead of std::cout << (the latter is the correct form), we end up with two reasons for your described errors:

  1. your compiler complains about std::cout << element[i] because no suitable overload is found to handle an entity of the type of element[i] and an std::ostream& (which is the underlying type of std::cout).

  2. your compiler complains about std::cout << test (arga, argb) because there is no function in scope named test that takes two arguments corresponding to arga, argv. test, in your snippet, is a member-function that belongs to an entity, it's not callable by its own.

3
қосылды

C ++ сайтына қош келдіңіз.

Біріншіден, шығыс синтаксисі:

cout<<
instead of
cout>>

Бұл тест - бұл логикалық функцияны қайтаратын функция. Бұл жерде элементтер [i] - бұл сынақ функциясы бар құрылым элементіне меңзейтін көрсеткіш.

C ++ тілін үйрену үшін мен жазған бұл мақалаларды пайдалана аласыз.

1
қосылды

C ++ сайтына қош келдіңіз.

Біріншіден, шығыс синтаксисі:

cout<<
instead of
cout>>

Бұл тест - бұл логикалық функцияны қайтаратын функция. Бұл жерде элементтер [i] - бұл сынақ функциясы бар құрылым элементіне меңзейтін көрсеткіш.

C ++ тілін үйрену үшін мен жазған бұл мақалаларды пайдалана аласыз.

1
қосылды

C ++ сайтына қош келдіңіз.

Біріншіден, шығыс синтаксисі:

cout<<
instead of
cout>>

Бұл тест - бұл логикалық функцияны қайтаратын функция. Бұл жерде элементтер [i] - бұл сынақ функциясы бар құрылым элементіне меңзейтін көрсеткіш.

C ++ тілін үйрену үшін мен жазған бұл мақалаларды пайдалана аласыз.

1
қосылды

Көптеген респонденттер жауап беруден бұрын кодексті беру керек екенін айтқаннан кейін кодқа тереңірек қарадым және келесі жолды қайта жаздым:

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

элементтердің [i] логикалық элементінің функциясы дұрыс немесе жоқ екенін тексеру үшін сынақ болып табылады.

The C++ program that I wrote to identify the meaning of -> in this context is:

#include "stdafx.h"
#include 
#include 
#include 

template
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 *> bones;
   //name, location, size
    bones.push_back(new Bone("femur", 10));
    bones.push_back(new Bone("ulna", 4));
    bones.push_back(new Bone("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 *thisBone = bones.back();
        bones.pop_back();
        delete thisBone;
    }
    return 0;
}

Мұны түсіну үшін мені жетелейтін барлық адамдарға рақмет.

0
қосылды

Көптеген респонденттер жауап беруден бұрын кодексті беру керек екенін айтқаннан кейін кодқа тереңірек қарадым және келесі жолды қайта жаздым:

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

элементтердің [i] логикалық элементінің функциясы дұрыс немесе жоқ екенін тексеру үшін сынақ болып табылады.

The C++ program that I wrote to identify the meaning of -> in this context is:

#include "stdafx.h"
#include 
#include 
#include 

template
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 *> bones;
   //name, location, size
    bones.push_back(new Bone("femur", 10));
    bones.push_back(new Bone("ulna", 4));
    bones.push_back(new Bone("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 *thisBone = bones.back();
        bones.pop_back();
        delete thisBone;
    }
    return 0;
}

Мұны түсіну үшін мені жетелейтін барлық адамдарға рақмет.

0
қосылды

Көптеген респонденттер жауап беруден бұрын кодексті беру керек екенін айтқаннан кейін кодқа тереңірек қарадым және келесі жолды қайта жаздым:

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

элементтердің [i] логикалық элементінің функциясы дұрыс немесе жоқ екенін тексеру үшін сынақ болып табылады.

The C++ program that I wrote to identify the meaning of -> in this context is:

#include "stdafx.h"
#include 
#include 
#include 

template
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 *> bones;
   //name, location, size
    bones.push_back(new Bone("femur", 10));
    bones.push_back(new Bone("ulna", 4));
    bones.push_back(new Bone("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 *thisBone = bones.back();
        bones.pop_back();
        delete thisBone;
    }
    return 0;
}

Мұны түсіну үшін мені жетелейтін барлық адамдарға рақмет.

0
қосылды