Это правильный способ доступа к данным членов класса?

Я использую отдельную компиляцию для домашнего задания, и у меня возник вопрос о доступе к членам данных класса, который я создал. При реализации функций-членов класса, который не принимает никаких параметров, и мне нужно получить доступ к элементу данных этого класса, как бы я сделал это в C++? Я знаю, что в Java есть this Ключевое слово, которое ссылается на объект, который вызывает функцию.

Мой заголовочный файл:

#ifndef _POLYNOMIAL_H
#define _POLYNOMIAL_H
#include <iostream>
#include <vector>

class Polynomial {

    private:
        std::vector<int> polynomial;

    public:
        // Default constructor
        Polynomial();

        // Parameterized constructor
        Polynomial(std::vector<int> poly);

        // Return the degree of of a polynomial.
        int degree();
};
#endif

Мой файл реализации:

#include "Polynomial.h"

Polynomial::Polynomial() {
        // Some code
}

Polynomial::Polynomial(std::vector<int> poly) {
    // Some code
}

int degree() {
    // How would I access the data members of the object that calls this method?
    // Example: polynomialOne.degree(), How would I access the data members of
    // polynomialOne?
}

Я смог получить прямой доступ к личному члену данных polynomial, но мне было интересно, если это правильный способ доступа к элементам данных объекта или мне нужно использовать что-то похожее на Java this ключевое слово для доступа к конкретным объектам данных членов?

3 ответа

Решение

Эта функция должна быть определена как член Polynomial с использованием Polynomial:: префикс.

int Polynomial::degree() {
}

Затем вы можете получить доступ к переменным-членам, таким как вектор polynomial,

Вы забыли добавить "Полином::" в функцию "Степень ()".

Вы думаете, что написанная вами функция "степени ()" является частью класса "Полином", но компилятор рассматривает ее как независимую "глобальную" функцию.

Так:

int degree() {
    // How would I access the data members of the object that calls this method?
    // Example: polynomialOne.degree(), How would I access the data members of
    // polynomialOne?
}

Должно быть:

int Polynomial::degree() {
  int SomeValue = 0;

  // Do something with "this->polynomial;" and "SomeValue"

  return SomeValue;
}

Приветствия.

Вам необходимо охватить определение функции степени вашим классом, чтобы компилятор знал, что степень принадлежит полиному. Затем вы можете получить доступ к своим переменным-членам следующим образом:

int Polynomial::degree() {
    int value = polynomial[0];
}

Без степени охвата вашего класса происходят две вещи. Ваш класс полиномов имеет функцию степени (), определенную без какого-либо определения. Кроме того, в вашем файле.cpp определена функция Степень (), представляющая собой отдельную функцию, не являющуюся частью какого-либо класса, поэтому вы не можете получить доступ к переменным-членам Полинома.

Другие вопросы по тегам