Это правильный способ доступа к данным членов класса?
Я использую отдельную компиляцию для домашнего задания, и у меня возник вопрос о доступе к членам данных класса, который я создал. При реализации функций-членов класса, который не принимает никаких параметров, и мне нужно получить доступ к элементу данных этого класса, как бы я сделал это в 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 определена функция Степень (), представляющая собой отдельную функцию, не являющуюся частью какого-либо класса, поэтому вы не можете получить доступ к переменным-членам Полинома.