首页 > 解决方案 > 使用方法的值在类中分配变量

问题描述

有没有办法用类方法的值在类中分配一个变量?

我正在尝试下面的示例,但它显然不起作用。有这样做的正确方法吗?

#include <iostream>

using namespace :: std;

class rectangle
{
    public:
        rectangle(double h, double w) {
            height = h;
            width = w;
        };

        double area(void) {
            return height*width;
        };

        double myarea = (*this).area();

    private:
        double height, width;
};

int main(void) {
    rectangle r(2.5, 3);
    cout << "Area is: " << r.area() << endl;
    cout << "Area is: " << r.myarea << endl;
    return 0;
}

结果

Area is: 7.5
Area is: 0

标签: c++classstruct

解决方案


问题是成员变量按照它们在类中声明的顺序进行初始化。此外,您的构造函数会在您实际初始化之前width创建对象,并且height就像您在构造函数的主体中而不是在初始化列表中进行初始赋值一样。因此,何时myarea初始化(在您的代码中),width并且height尚未设置。

要解决此问题,您可以重新排序成员并将初始化和移动widthheight列表中:

class rectangle {
private:
    double height, width; // These will NOW be set before "myarea" is calculated
public:
    rectangle(double h, double w) : height{ h }, width{ w } {
        // Any assignments done here will be AFTER initialization of "myarea"
    }
    double area(void) {
        return height * width;
    }
    double myarea = area();
};

此外,您不需要复杂的(*this).area()语法 - 就可以了area()

编辑:要记住的另一件事是myarea调用area()函数的设置只会进行一次(在对象创建时);如果您更改任何一个widthheight稍后更改,您将不会(自动)更改myarea.


推荐阅读