c++ - 如何向基类添加另一个初始化函数但不编辑基文件?
问题描述
我在初始化类时遇到了麻烦,我想扩展一下。这是基类:
基本文件.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;
}
我想过使用派生类,但是我想要扩展基类,因为我想直接使用基类,我搜索了部分类以及许多不同的方法,但仍然失败。
解决方案
您只能在其定义中向一个类添加成员,并且一个类只能有一个定义。
正如您在问题中指出的那样,稍后扩展类是通过继承完成的。
如果你想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
在其函数头中缺少返回值。
推荐阅读
- datetime - 默认情况下,如果在 java-11 中使用 ZonedDateTime 时它的值为 0,Databse DateTime 毫秒和纳秒将被截断
- vue.js - VueJS:使用 vuejs 将数据传递给方法
- c++ - C++ 实现具有不同优先级函数的优先级队列的最佳方法是什么?
- typescript - TypeScript Generic Types 问题:需要解决方法
- assembly - Ascii 立即在气体中?
- python - 有人可以帮助在我的 pygame 代码中实现重力和运行动画吗?
- ruby-on-rails - Ruby:从 UPS API 获取跟踪信息(无需登录)
- t-test - 根据 ggpredict / ggeffect 的输出比较第一/第二差异的统计测试
- java - 基于 JSON 整数属性将 JSON 有效负载反序列化为对象
- php - 获取从给定月份开始到另一个月份结束的月份列表?