首页 > 解决方案 > 如何向基类添加另一个初始化函数但不编辑基文件?

问题描述

我在初始化类时遇到了麻烦,我想扩展一下。这是基类:

基本文件.cpp

Class Point3d
{
public:
    Point3d ();
    Point3d (double x, double y, double z);
    Point3d&   set (double x, double y, double z);
    double x, y, z;
}
Point3d :: Point3d (): x (0.0), y (0.0), z (0.0)
{
}
inline Point3d &
Point3d :: set (double xx, double yy, double zz)
{
     x = xx;
     y = yy;
     z = zz;
     return * this;
    }
.....

编辑

我想在声明Point3D pt {1,1}时,它意味着z = 0,所以如果我没有编辑原始文件,如何在基类上添加默认初始化函数z = 0,但从另一个文件,它看起来像这个:

Point3d::Point3d(double xx, double yy, double zz=0) { x = xx; y = yy; z = zz; }
//or
Point3d :: Point3d (double xx, double yy)
{
     x = xx;
     y = yy;
     z = 0;
     return * this;
}

我想过使用派生类,但是我想要扩展基类,因为我想直接使用基类,我搜索了部分类以及许多不同的方法,但仍然失败。

标签: c++

解决方案


您只能在其定义中向一个类添加成员,并且一个类只能有一个定义。

正如您在问题中指出的那样,稍后扩展类是通过继承完成的。

如果你想set在你的类中有一个函数,你需要在类定义中声明它:

class Point3d
{
public:
    Point3d ();
    Point3d (double x, double y, double z);
    Point3d& set (double xx, double yy, double zz = 0);
    double x, y, z;
};

另请注意,您不需要 的第二个定义set,因为您已经使用了 的默认参数z

您的代码中还有一些语法错误。特别是set在其函数头中缺少返回值。


推荐阅读