繁体   English   中英

在代码错误中访问私有 class

[英]Accessing private class within a code error

您好,我需要帮助来访问和显示从基 class 派生的三个类的结果。它们是私有的,我很难这样做。 我根据我对 set and get 的理解自行搜索和尝试,但它不起作用。

#include<iostream>
using namespace std;

class Shape
{
private:
    double height, width;
    double radius;
public:
    void set_data(int i)
    {
        height, width, radius = i;

    }
    void get_data()
    {
        cin>>height>>width>>radius;
    }
    virtual void display_area()=0;
};

class Triangle: public Shape
{
public:
    void display_area()
    {
        cout<<"\nArea of triangle = "<<(height*width)/2;
    };
};

class Rectangle : public Shape
{
public:
    void display_area()
    {
        cout<<"\nArea of rectangle = "<<height*width;
    }
};

class Circle: public Shape
{
public:
    void display_area()
    {
        cout<<"\nArea of circle = "<<3.14*radius*radius;
    }
};
int main()
{
    Triangle t;
    Shape *st = &t;
    Rectangle r;
    Shape *sr = &r;
    Circle c;
    Shape *sc = &c;
    cout<<"Enter height and width: ";

    t.set_data(2,6);
    r.set_data(9,10);
    c.set_data(3,6,4);
    cout<<t.get_data()<<r.get_data()<<c.get_data();


    return 0;
}
    t.set_data(2,6);
    r.set_data(9,10);
    c.set_data(3,6,4);
    cout<<t.get_data()<<r.get_data()<<c.get_data();

我知道在公共电话中访问私人电话 class 会带来错误,所以我尝试了整套电话并得到了,但我认为我仍然做错了,我需要一些指导/帮助。

你的set_data function 只需要一个 integer。对于你试图用三个 arguments 调用它的圆圈。

一般的 class Shape都有一个radius作为属性。 这是没有意义的,因为有不使用它的派生类。

还。 你的get_data function 会要求用户用键盘写一些数字。 它是一个 function,什么都不返回。 因此,当您编写cout << t.get_data()时,不会打印任何内容,因为coutget_data中什么也得不到。

您最好将Shape视为接口 即:强制所有派生类实现set_datadisplay_area ,但不要在基类 class 中实现任何此逻辑,因为它太笼统了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM