gpt4 book ai didi

c++ - 继承:动态派生类成员与静态派生类成员

转载 作者:行者123 更新时间:2023-11-30 05:00:02 26 4
gpt4 key购买 nike

目的是实现一个基类:vector_base...

对于如何为下面概述的两个 vector 类创建基类,我有一些误解。

首先:基类是否应该为每个派生类都有一个构造函数和一个默认构造函数?或者有没有办法在这种情况下调用基础构造函数来完成派生......

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)静态还是动态(指针类型)?

第三:访问器和修改器在每种情况下如何工作;是否有任何理由考虑关键字:virtual 和 override?

基本上我不明白如果数据成员是double类型和double*类型如何实现多态

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_staticvector_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';

关于c++ - 继承:动态派生类成员与静态派生类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50958924/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com