-1

ここに問題があります: Voltmeter、Ammeter、ResistanceMeter という名前の 3 つの基本クラスを作成します。Voltmeter クラスには、メンバ関数 volt、デフォルト以外のコンストラクタ、コピー コンストラクタ、および関数 measureVolt() があります。Ammeter クラスには、メンバ関数 amp、非デフォルト コンストラクタ、コピー コンストラクタ、および関数 measureCurrent() があります。ResistanceMeter クラスには、メンバ関数 resistance、非デフォルト コンストラクタ、コピー コンストラクタ、および関数 measureResistance() があります。次に、Voltmeter、Ammeter、ResistanceMeter のオブジェクトを持つクラス Multimeter を作成して、これらのクラスの機能を使用できるようにします。

私の解決策では、コンパイラは、クラス「マルチメーター」で使用したすべてのオブジェクトで未定義の参照を言います。コードは次のとおりです。

#include<iostream>
#include<cstdio>
#include<string>

using namespace std;

class voltmeter{   //class - Voltmeter
    float volt;

public:

    voltmeter(); //default constructor
    voltmeter(float v){   //non default constructor
        volt = v;
    }

    voltmeter(voltmeter &ob) //copy constructor
    {
        volt = ob.volt;
    }

    void set_volt(float v)
    {
        volt = v;
    }
    float get_volt(void)
    {
        return volt;
    }
    void measure_volt(void) //measureVolt()
    {
        cout<<"Current volt in the circuit is: "<<volt<<"V"<<endl;
    }
};

class ameter
{
    float amp;
public:
    ameter();

    ameter(float a)
    {
        amp = a;
    }
    ameter(ameter &ob)
    {
        amp = ob.amp;
    }

    void measure_current(void)
    {
        cout<<"Current flow in circuit is: "<<amp<<"amp"<<endl;
    }

    void set_amp(float a)
    {
        amp = a;
    }
    float get_amp(void)
    {
        return amp;
    }

};

class res_meter //class - resistanceMeter
{
    float resistance;

public:
    res_meter();

    res_meter(float res)
    {
        resistance = res;
    }

    res_meter(res_meter &ob)
    {
        resistance = ob.resistance;
    }

    float get_resistance(void)
    {
        return resistance;
    }

    void set_resistance(float res)
    {
        resistance = res;
    }

    void meas_res(void)
    {
        cout<<"Current resistance in circuit is "<<resistance<<"ohm"<<endl;
    }

};

class multimeter
{
    res_meter r1;
    ameter a1;
    voltmeter v1;

public:
    multimeter(){
        r1.set_resistance(12.30);
        a1.set_amp(22.5);
        v1.set_volt(26.9);
    }
  //  ~multimeter();

    void show_info(void)
    {
        cout<<"Current Multimeter Status is as below: "<<endl;
        a1.measure_current();
        r1.meas_res();
        v1.measure_volt();
    }
};


int main()
{
    multimeter M;

    M.show_info();

    return 0;
}
4

2 に答える 2

3

(クラスで使用される) すべてのクラスの既定のコンストラクターを宣言しますが、コンストラクターを定義するmultimeterことはありません。

変更例:

class voltmeter
{
    // ...

    voltmeter();

    // ...
};

class voltmeter
{
    // ...

    voltmeter() {}

    // ...
};
于 2013-06-29T17:43:21.967 に答える
0

私の解決策では、コンパイラは、クラス「マルチメーター」で使用したすべてのオブジェクトで未定義の参照を言います。

警告メッセージをもっと注意深く読んでください。コンパイラは、multimeter既定のコンストラクター (定義されている) が、クラスameterres_meter、およびvoltmeter' の既定のコンストラクターを参照していることを通知しています。定義されていないのは、これらのデフォルトのコンストラクターです。

したがって、それらを定義するか、定義したデフォルト以外のコンストラクターを使用してください。

于 2013-06-29T17:45:37.560 に答える