4. 有以下类定义: class Mug { private: float price; static const float defaultPrice; public: Mug(float _price){ defaultPrice = 49.9; setPrice(_price); } ~Mug() { cout << "~Mug()" << endl; } float getPrice() { return price; } void setPrice(float newPrice) { if (newPrice < 0 || newPrice>1000) price = defaultPrice; else price = newPrice; } }; 1)上述定义有哪些错误的地方,请在下面改过来。 4 / 4 2)根据上述类定义,下面的代码有没有语法错误?为什么? int main(void) { Mug mug1(35); cout << mug1.getPrice() << endl; const Mug mug2(78); cout << mug2.getPrice() << endl; return 0; } 3)若要使得上述 main 函数可以正常编译运行,要修改 Mug 类的什么成员函数, 写出修改后的成员函数。 4)假设sizeof(float)==4,那么sizeof(mug1)是多少?为什么?
时间: 2023-11-28 15:50:24 浏览: 62
1. 以下是有错误的地方和修改过后的代码:
```
class Mug {
private:
float price;
static const float defaultPrice;
public:
Mug(float _price) {
setPrice(_price);
}
~Mug() { cout << "~Mug()" << endl; }
float getPrice() const { return price; }
void setPrice(float newPrice) {
if (newPrice < 0 || newPrice>1000)
price = defaultPrice;
else
price = newPrice;
}
};
const float Mug::defaultPrice = 49.9;
```
错误的地方包括:
- 在构造函数中对静态成员变量进行了赋值,应该在类外进行定义和初始化。
- getPrice 函数没有加 const 修饰符。
- 默认价格应该为静态常量,而不是静态变量。
2. 代码没有语法错误。因为 const Mug mug2(78) 是一个常量对象,只能调用常量成员函数,而 getPrice 函数是常量成员函数,因此可以正常调用。
3. 修改后的函数如下:
```
void setPrice(float newPrice) {
if (newPrice < 0 || newPrice>1000)
price = defaultPrice;
else
price = newPrice;
}
```
需要在 setPrice 函数中加上对默认价格的赋值操作。
4. sizeof(mug1) 的结果是 4,因为 float 类型占用 4 个字节的存储空间。Mug 类只有一个 float 类型的成员变量,因此对象的大小就是该成员变量的大小。
阅读全文