继承:动态派生类成员与静态派生类成员
Inheritance: dynamic derived class members vs static derrived class members
目的是实现一个基类:vector_base...
对于如何为下面概述的两个向量类创建基类,我有一些误解。
首先:基类是否应该为每个派生类提供一个构造函数和一个默认构造函数? 或者有没有办法调用基构造函数来完成在这种情况下的派生......
class three: public two
{
private:
double z;
public:
three(double x = 0, double y = 0, double z = 0)
: two(x, y), // call two(double, double) to initialize x & y
z(z)
// ...
};
第二:基类应该有两组坐标(x,y,z(静态和动态(指针类型(吗?
第三:在每种情况下,访问器和突变器是如何工作的;有什么理由考虑关键词:虚拟和覆盖?
基本上我不明白如果数据成员类型为双精度型和双精度型,如何实现多态性*
class vector_static
{
private:
double x;
double y;
double z;
public:
vector_static(double x = 0, double y = 0, double z = 0)
: x(x), y(y), z(z) {}
vector_static(const vector_static& copy)
: x(copy.x), y(copy.y), z(copy.z) {}
~vector_static()
{
std::cout << "vector_static::~vector_static() " << std::endl;
};
class vector_dynamic
{
private:
double* x = nullptr;
double* y = nullptr;
double* z = nullptr;
public:
vector_dynamic(double x = 0, double y = 0, double z = 0)
: x {new double (x)},
y {new double (y)},
z {new double (z)}
{
}
vector_dynamic(const vector_dynamic& copy)
: x{new double (copy.get_x() )},
y{new double (copy.get_y() )},
z{new double (copy.get_z() )}
{
}
~vector_dynamic()
{
std::cout << "nvector_dynamic::~vector_dynamic()" << std::endl;
delete x;
delete y;
delete z;
}
};
vector_static
和vector_dynamic
不相关,你不能多态地使用它们。它们需要有一个公共基类来定义可以调用以访问坐标的虚函数。然后,您将在每个派生类中重写这些方法以获取或设置坐标;一个将直接访问成员,另一个将取消引用指针。
class vector_generic {
public:
virtual double getX();
virtual void setX(double);
...
}
class vector_static : public vector_generic {
public:
double getX() {
return x;
}
double setX(double newX) {
x = newX;
}
...
}
class vector_dynamic : public vector_generic {
public:
double getX() {
return *x;
}
double setX(double newX) {
*x = newX;
}
...
}
有了这个,您可以执行以下操作:
vector_generic *vec1 = new vector_static();
vector_generic *vec2 = new vector_dynamic();
cout << vec1->getX() << vec2->getX() << 'n';
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 如何使用基类指针引用派生类成员
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 在 C++ 中用派生类型重写成员函数
- 如果基类包含双指针成员,则派生类的构造函数
- 在派生类中绑定非静态模板化成员函数
- 为什么派生类的好友不能使用受保护的成员?
- 在派生类中使用基类的私有成员变量的最佳方法
- 派生类如何获取基的成员?
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 调用派生类成员函数
- 从模板化父类中的派生内部类访问受保护的成员变量
- 将基类的成员函数重载到其他派生类C++
- 派生的成员 通过指向基、static_cast、crtp、删除模板的指针
- C++ 使用派生类方法更改基类数据成员
- 派生类看不到基类成员
- 使用派生类中的静态成员而不是基类
- 是否可以使用 using 将基类中的公共成员重新声明为派生类中的私有成员?
- 如何将派生类中的成员函数作为回调传递?