c++ - C++中的构造函数继承

标签 c++ inheritance constructor

我有两个问题要问。 为什么人们在类的头部实现一些方法?喜欢:

public:
    point2D():x(0),y(0){};
    point2D(int xP, int yP):x(xP),y(yP){};

这与在不同文件(性能、内存)中实现的真正区别是什么?

我的第二个问题是关于构造函数在继承中的使用。

1. point2D::point2D(){
2.    x = 10;
3.    y = 10;
4. }

5. point2D::point2D(int xP, int yP){
6.    x = xP;
7.    y = yP;
8. }

9.  point3D::point3D(){
10.    point2D();
11.    z = 0;
12. }

13. point3D::point3D(int xP, int yP, int zP){
14.    point2D(xP, yP);
15.    z = zP;
16. }

当我尝试在单独的 CPP 中创建我的构造函数时,接收 3 个参数的 point3D 的构造函数(第 13 行)尝试使用具有 2 个整数参数的 point2D 构造函数(第 14 行),实际调用的构造函数是没有参数的 point2D。为什么?我们在构造函数的调用中有 2 个参数。

谢谢你们,我希望我的疑虑是清楚的。

最佳答案

问题 1:

我希望这就是您要问的。

人们倾向于在头文件和类中实现构造函数,如果它没有太多工作要做并且可以像上面那样写在 1 行上。这只是风格,因人而异。另一个原因是因为它是内联的,以提高性能。

否则,如果您正在谈论构造函数初始化列表 (CONSTR(...) : <constructor initializer list> { })那么这样做的原因是它初始化数据成员,当你在构造函数的主体中分配给它们时(就像你在第二段代码中所做的那样)那么这不是初始化它,而是分配给它们并且是效率较低。虽然它确实有用,但有时您需要在获取数据成员值之前做其他工作。例如获取输入。

问题 2:

你又必须使用构造函数初始化列表而不是主体所以这里是一个例子

point3D::point3D(int xP, int yP, int zP) : point2D(xP, yP), z(zP) { }

关于c++ - C++中的构造函数继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31712293/

相关文章:

C++ 子集总和 2^n/递归错误/澄清

C++ ParseDateTime() - SQL 日期时间作为英国日期

c++ - 将基类的实例传递给派生类

Java错误: constructor Transaction in class Transaction cannot be applied to given types

c++ - 如何使警告在 visual studio 中持续存在

PHP : Does extending class need another 'use' to call namespace?

javascript - JS 继承示例 : too much recursion

C++ 模板 : The static member in a global object is not initialized

c++ - 委托(delegate)和调用父类构造函数 : How do I do both?

c++ - 回归测试如何证明是否调用了 VirtualAlloc?