1

我的问题是非常初学者,是的,我已经进行了广泛的查找,但是当我做这些事情时,我在网上发现 Xcode 给了我错误。

基本上,我只是好奇如何为派生类实现构造函数。我的类叫做“Sensor”,派生类是digitalSensor 和analogSensor。

Here's my 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,你可以在底部看到我的 digitalSensor 工作的开始。

#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**********//

sensor digitalSensor::digitalSensor(char *n, float pc) {

}

简而言之:我需要为数字传感器类创建一个构造函数。我错过了什么,我该怎么做?在此先感谢您提供任何帮助或知识!

4

2 回答 2

5

像这样实现它的构造函数:

digitalSensor::digitalSensor(char*n, float pc) : sensor(n, pc)
{
}

如您所见,它不返回任何内容,而是调用其父级的构造函数。

 

但是你这样做是错误的:

sensor digitalSensor::digitalSensor(char *n, float pc) {
^^^^^^ constructors shall not return anything
}
于 2013-05-24T22:18:02.183 回答
3

您应该在派生类的成员初始化列表中调用基类构造函数。

例如:

   class digitalSensor : public sensor {
    int reading;

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

这定义了digitalSensor内联构造函数。您还可以使用类外的范围解析运算符定义它:

digitalSensor::digitalSensor(char*n, float pc):sensor(n, pc), reading(0){}
//^^Note that constructor of a class does not have any return type

这实际上取决于如何提供基类构造函数。但这可能是一种方法。您可能会发现初始化基类和成员很有用。

于 2013-05-24T22:18:08.840 回答