C++ 从圆圈中引出笑脸
我试图从Circle中衍生出课堂笑脸:C++ 从圆圈中引出笑脸,c++,C++,我试图从Circle中衍生出课堂笑脸: struct Smiley : Circle { void draw_lines() const; }; void Smiley::draw_lines() const { Circle::draw_lines(); // outline /*rest of code here*/ } 这是圆的定义: struct Circle : Shape { Circle(Point p, int rr); // center and
struct Smiley : Circle {
void draw_lines() const;
};
void Smiley::draw_lines() const {
Circle::draw_lines(); // outline
/*rest of code here*/
}
这是圆的定义:
struct Circle : Shape {
Circle(Point p, int rr); // center and radius
void draw_lines() const;
Point center() const;
void set_radius(int rr) { set_point(0, Point(center().x - rr, center().y - rr)); r = rr; }
int radius() const { return r; }
private:
int r;
};
我基本上想要一个上面画有两个圆弧的圆。理论上,我应该只需要写draw_lines()
over(在形状上定义为virtual
),但如果没有构造函数,它什么也做不了,如果我有构造函数,它就会出错,并说Circle没有可用的默认构造函数,即使我在构造函数中没有与Circle相关的代码
有人知道我为什么会出现这个错误吗?您已经为需要点和半径的圆定义了一个构造函数。您应该为
Smiley
定义一个具有相同参数的函数,该函数通过
您已经为需要点和半径的圆定义了构造函数。您应该为
Smiley
定义一个具有相同参数的函数,该函数通过
您已经为需要点和半径的圆定义了构造函数。您应该为
Smiley
定义一个具有相同参数的函数,该函数通过
您已经为需要点和半径的圆定义了构造函数。您应该为
Smiley
定义一个具有相同参数的函数,该函数通过
从没有默认构造函数的类继承时,必须确保调用非默认构造函数。 否则,派生类将尝试调用不存在的默认构造函数,如错误所示。在这种情况下,您可以直接传递相同的参数
struct Smiley : Circle {
Smiley(Point p, int rr);
void draw_lines() const;
};
Smiley::Smiley(Point p, int rr)
: Circle(p, rr)
{};
我基本上想要一个上面画有两个圆弧的圆
那么它就不再是一个圆了,那么为什么
Smiley
继承circle
?当您从没有默认构造函数的类继承时,您必须确保调用非默认构造函数。
否则,派生类将尝试调用不存在的默认构造函数,如错误所示。在这种情况下,您可以直接传递相同的参数
struct Smiley : Circle {
Smiley(Point p, int rr);
void draw_lines() const;
};
Smiley::Smiley(Point p, int rr)
: Circle(p, rr)
{};
我基本上想要一个上面画有两个圆弧的圆
那么它就不再是一个圆了,那么为什么
Smiley
继承circle
?当您从没有默认构造函数的类继承时,您必须确保调用非默认构造函数。
否则,派生类将尝试调用不存在的默认构造函数,如错误所示。在这种情况下,您可以直接传递相同的参数
struct Smiley : Circle {
Smiley(Point p, int rr);
void draw_lines() const;
};
Smiley::Smiley(Point p, int rr)
: Circle(p, rr)
{};
我基本上想要一个上面画有两个圆弧的圆
那么它就不再是一个圆了,那么为什么
Smiley
继承circle
?当您从没有默认构造函数的类继承时,您必须确保调用非默认构造函数。
否则,派生类将尝试调用不存在的默认构造函数,如错误所示。在这种情况下,您可以直接传递相同的参数
struct Smiley : Circle {
Smiley(Point p, int rr);
void draw_lines() const;
};
Smiley::Smiley(Point p, int rr)
: Circle(p, rr)
{};
我基本上想要一个上面画有两个圆弧的圆
那么它就不再是一个圆了,那么为什么
Smiley
继承circle
?编译器给出的错误是不言自明的……但是circle确实有一个构造函数,那么为什么我会得到这个错误呢?我只想直接从形状派生Smiley并重做实现细节,但作业(不是针对类,只是我自己学习)说从圆圈派生它。@user2509848:它有一个构造函数,是的,该构造函数需要参数。编译器给出的错误是不言自明的…但Circle确实有一个构造函数,所以为什么我会得到这个错误?我只想直接从形状派生Smiley并重做实现细节,但作业(不是针对类,只是我自己学习)说从圆圈派生它。@user2509848:它有一个构造函数,是的,该构造函数需要参数。编译器给出的错误是不言自明的…但Circle确实有一个构造函数,所以为什么我会得到这个错误?我只想直接从形状派生Smiley并重做实现细节,但作业(不是针对类,只是我自己学习)说从圆圈派生它。@user2509848:它有一个构造函数,是的,该构造函数需要参数。编译器给出的错误是不言自明的…但Circle确实有一个构造函数,所以为什么我会得到这个错误?我只想直接从形状派生Smiley并重做实现细节,但作业(不是针对类,只是我自己学习)说从圆圈派生它。@user2509848:它有一个构造函数,是的,该构造函数需要参数。你没有给它任何。这可以是更好的措辞,特别是考虑到你试图解释给一个新手。“你需要为Smiley定义一个相同的构造函数”是完全错误的。所以我只需要为这些问题定义一个空构造函数?@user2509848-构造函数不是“空的”。虽然它有一个空的代码体,但重要的是通过初始化列表初始化基类;“初始化列表”现在是一个重载术语。@LightnessRacesinOrbit。同意。多说些废话总是个好主意。(深深地叹了口气……)这可以用更好的措辞,尤其是考虑到你正试图向新手解释。“你需要为Smiley定义一个相同的构造函数”是完全错误的。所以我只需要为这些问题定义一个空构造函数?@user2509848-构造函数不是“空的”。虽然它有一个空的代码体,但重要的是它通过