-1

问题是:编写三个基类,分别命名为电压表、电流表和电阻表。电压表类将有一个成员函数 volt、一个非默认构造函数、一个复制构造函数和一个函数 measureVolt()。Ammeter 类将具有成员函数 amp、非默认构造函数、复制构造函数和函数 measureCurrent()。ResistanceMeter 类将具有成员函数resistance、非默认构造函数、复制构造函数和函数measureResistance()。现在编写一个万用表类,它将具有电压表、电流表和电阻表的对象,因此它可以使用这些类的功能。

在我的解决方案中,编译器对我在“万用表”类中使用的每个对象都说未定义的引用。代码如下:

#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默认构造函数(已定义)正在引用类 、 和 ' 的默认ameter构造res_meter函数voltmeter。是那些未定义的默认构造函数。

所以定义它们,或者使用你定义的非默认构造函数。

于 2013-06-29T17:45:37.560 回答