微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我不能在我的类定义中声明另一个类私有的数据成员

如何解决为什么我不能在我的类定义中声明另一个类私有的数据成员

当我在类 circle 中将 Point p 声明为私有时,我收到一个编译器错误,指出数据成员 Point p 在上下文中是私有的。代码和编译器错误如下。

#include<iostream>
#include<vector>
 class Point
 {
   public:
   Point(double a,double b)
{
    x = a;
    y = b;
   
}
   virtual ~Point(){}
   private:
   double x;
   double y;
}; 

类形状和圆形的代码如下:

class shapes {
         public:
         virtual Point centre() const = 0;
         virtual void draw() const = 0;
         virtual void rotate(int angle) const = 0;
         virtual ~shapes(){}
 };

class circle: public shapes {
        public:
         Point centre() const override { return p; }
         void draw() const override { }
         void rotate(int angle) const override {}
         virtual ~circle() {}
         circle(Point x,int r):p{x},radius{r}{}
       
         private:
          Point p;
          int radius; };

编辑:笑脸类继承自圆类,代码如下:

class smiley: public circle
{ //smiley face is a circle + eyes and mouth
public:
smiley(Point p,int r):circle{p,r},mouth{nullptr}{}
Point centre() const override { return p;}
void draw() const override 
{
    //draw circle
    circle::draw();
    for(auto e:eyes)
    {
        e->draw();
    }
    mouth->draw();

}
void rotate(int angle) const {}

virtual ~smiley()
{
    delete mouth;
    for (auto eye : eyes) //why not delete [] eyes
    {
        delete eye;
    }
}
private:
std::vector<shapes*> eyes; //smiley face has eyes
shapes* mouth; //smiley face has a mouth
};

如果我在类圈中公开数据成员 p,则一切正常。下面列出了编译器错误

enter image description here

为什么不能在圆类private中定义Point对象p?

编辑:我添加了编译器错误消息并添加了下面评论中要求的缺失代码。你能重新打开这个问题吗?

解决方法

私有类成员只能在类内或由朋友访问,因此,如果您希望非朋友在类外访问它,则需要使用 setter/getter。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。