构造函数无法访问继承类private int

时间:2018-07-04 12:15:38

标签: c++

Class Point运行正常,正在创建x,y点。代码:

point.h文件

BaseDTO

point.cpp文件

#ifndef POINT_H
#define POINT_H

namespace pt
{
    class Point
    {
        int x, y;
    public:
        Point();
        Point(int x, int y);
        int getX();
        int getY();
    };
}
#endif // POINT_H

与此同时,当我尝试在main中创建新的Point3D类时,该类将从Point x,y坐标继承并添加z以创建三维尺寸,新构造函数无法访问Point类的x,y。错误是: 1.'int pt :: Point :: x'在Point3D构造的第一和第二个this->中是私有的。 2.两者都是“脱离上下文”

main.cpp

#include "point.h"

pt::Point::Point()
{
    this->x = this->y = 0;
}

pt::Point::Point(int x, int y)
{
    this->x=x;
    this->y=y;
}

int pt::Point::getX()
{
    return this->x;
}

int pt::Point::getY()
{
    return this->y;
}

感谢帮助。

1 个答案:

答案 0 :(得分:2)

要使xy可以被派生类访问,则应使它们受到保护:

class Point
{
protected:
    int x, y;
public:
    Point();
    Point(int x, int y);
    int getX();
    int getY();
};

默认情况下,类成员的可见性为private(请注意,这与默认情况下结构成员为public的结构默认值不同)。关于该主题,请参见this answer

此外,初始化xy的惯用方式是编写:

Point3D(int x ,int y, int z) : pt::Point(x,y)
{
    this->z=z;
}

然后,您无需保护xy,它们可以保持私密状态。

您甚至可以这样写:

Point3D(int x ,int y, int z) : pt::Point(x,y), z(z)
{}