Проверка члена данных производного класса

Мой вопрос скорее концептуальный / обучающий, который применим в данном конкретном случае. Я делаю назначение, и у меня есть класс с именем sensor и производный класс, называемый digitalSensor. Одним из элементов данных датчика является «функционирование». И когда я реализую функцию печати для digitalSensor, мне нужно распечатать строку, основанную на том, «работает» ли цифровой датчик или нет.

по сути, мне нужно сделать оператор if в digitalSensor, где он проверяет значение «функции». Но Xcode говорит мне, что «функционирование является частным членом датчика». Поскольку digitalSensor является производным от датчика, не должен ли он иметь переменную-член «функционирование»? Как проверить это при создании функции печати digitalSensor?

Вот мой файл sensor.h:

#ifndef __Program_6__sensor__
#define __Program_6__sensor__

#include <iostream>

class sensor {
char* SensorName;
float energyDraw;
int functioning;
int onoff;

public:
sensor(char*n, float pc);
virtual void print();

void setOK(int K);
int getOK();
void setOnOff(int n);
int getOnOff();
};
//---------
class digitalSensor : public sensor {
int reading;

public:
digitalSensor(char*n, float pc);
virtual void print();
void setCurrentReading(int r);
int getCurrentReading();
};

class analogSensor : public sensor {
int Reading;
int minRead;
int maxRead;

public:
analogSensor(char *n, float pc, int mm, int mx);
virtual void print();
void setCurrentReading(int r);
int getCurrentReading();
};#endif /* defined(__Program_6__sensor__) */

А вот мой файл sensor.cpp, моя работа над функцией печати находится внизу:

#include "sensor.h"#include "definitions.h"using namespace std;

//--------SENSOR CLASS------------//
sensor::sensor(char *n, float pc) {

SensorName = (char*)malloc(strlen(n)+1);
energyDraw = pc;
functioning = WORKING;
onoff = OFF;
}
void sensor::print() {
cout << "     Sensor: " << SensorName;
cout << "   Power Consumption: " << energyDraw;
if (functioning == WORKING) {
cout << "\nSensor is functioning correctly\n";

if (onoff == ON) {
cout << "Sensor is On";
}
if (onoff == OFF) {
cout << "Sensor is Off";
}

}
if (functioning == NOTWORKING) {
cout << "Sensor is not functioning correctly";
}
}
void sensor::setOK(int k) {
functioning = k;
}
int sensor::getOK() {
return functioning;
}
void sensor::setOnOff(int n) {
onoff = n;
}
int sensor::getOnOff() {
return onoff;
}
//---------------------------------//

//*********DIGITAL SENSOR**********//

digitalSensor::digitalSensor(char *n, float pc) : sensor(n, pc){
reading = OFF;

}
void digitalSensor::print() {
sensor::print();
if (functioning == WORKING && onoff == ON) {
cout << "Current sensor reading is: " << reading;
}
if (digitalSensor.functioning == WORKING && digitalSensor.onoff == OFF) {
cout << "Current reading not available";
}
}

Ошибка в две строки после «void digitalSensor :: print ()» в конце.

спасибо за любую помощь, которую вы все можете оказать! Я обязательно отвечу взаимностью и отвечу на вопросы новичка, когда-нибудь, когда я изучу этот материал!

0

Решение

В C ++ видимость по умолчанию для class Члены private, что означает, что поля и методы не доступны извне, даже не из подклассов. Решение помечает соответствующие поля как protected (такой же как private, но доступно из подкласса):

class sensor {
protected:
char* SensorName;
float energyDraw;
int functioning;
int onoff;

public:
sensor(char*n, float pc);
virtual void print();

void setOK(int K);
int getOK();
void setOnOff(int n);
int getOnOff();
};
4

Другие решения

Других решений пока нет …