Здесь значения x и y пытаются установить через конструктор базового класса.Почему конструктор базового класса не задает значения?
Но код не может это сделать.
#include <iostream>
class Point2d {
public:
double x;
double y;
Point2d() : x(0), y(0) {
}
Point2d(double x, double y) : x(x), y(y) {
}
void Show() {
std::cout << "(" << x << "," << y << ")\n";
}
};
class Vector2d : public Point2d {
public:
Vector2d():Point2d(){
}
Vector2d(double x, double y) : Point2d(x,y) {
}
Vector2d(Vector2d const& vec) : Point2d(vec){
}
void Set(double x, double y) {
Point2d::Point2d(x, y);
}
};
int main() {
Vector2d v;
v.Set(20, -39);
v.Show(); // prints '(0,0)' instead of '(20,-39)'
}
Моей целью является повторное использование конструктора базового класса и перегруженных операторов присваивания как можно больше.
Вы ни сказали точно, что произошло, ни то, что вы ожидали. Тем не менее, вы пытаетесь вызвать конструктор вне конструкции объекта, но только создаете временный анонимный объект. Есть способы сделать то, что вы хотите, включая размещение нового, но подход является ошибочным. Просто установите значения. –