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;
}
感谢帮助。
答案 0 :(得分:2)
要使x
和y
可以被派生类访问,则应使它们受到保护:
class Point
{
protected:
int x, y;
public:
Point();
Point(int x, int y);
int getX();
int getY();
};
默认情况下,类成员的可见性为private
(请注意,这与默认情况下结构成员为public
的结构默认值不同)。关于该主题,请参见this answer。
此外,初始化x
和y
的惯用方式是编写:
Point3D(int x ,int y, int z) : pt::Point(x,y)
{
this->z=z;
}
然后,您无需保护x
和y
,它们可以保持私密状态。
您甚至可以这样写:
Point3D(int x ,int y, int z) : pt::Point(x,y), z(z)
{}