定义一个Cat类,其拥有静态数据成员numOfCats,记录已经创建的Cat对象的个体数目,静态数据成员numOfCatsGo,记录已经销毁的Cat对象的个体数目;静态成员函数getNumOfCats(bool IsConstruted),当IsConstruted为true时读取numOfCats,当IsConstruted为false时读取numOfCatsGo;数据私有成员weight,记录Cat对象的体重。 定义一个Boat类,其拥有数据私有成员weight,记录Boat对象的体重。 根据上述请完成如下内容: (1)请设计一个Cat类,体会静态数据成员和静态成员函数的用法。 (2)定义一个Cat类和Boat类的友元函数getTotalWeight(),计算一个Cat对象和Boat对象的体重和并返回。
时间: 2023-11-22 08:53:02 浏览: 169
Nginx + Tomcat实现请求动态数据和请求静态资源的分离详解
(1) Cat类的设计如下:
```c++
class Cat {
private:
double weight;
static int numOfCats;
static int numOfCatsGo;
public:
Cat(double w = 0) : weight(w) { numOfCats++; }
~Cat() { numOfCatsGo++; }
static int getNumOfCats(bool IsConstruted) {
if (IsConstruted)
return numOfCats;
else
return numOfCatsGo;
}
friend double getTotalWeight(const Cat& c, const Boat& b);
};
int Cat::numOfCats = 0;
int Cat::numOfCatsGo = 0;
```
在这个类中,我们定义了一个静态数据成员numOfCats和numOfCatsGo分别记录已经创建的Cat对象的个体数目和已经销毁的Cat对象的个体数目。同时我们定义了一个静态成员函数getNumOfCats(bool IsConstruted),当IsConstruted为true时读取numOfCats,当IsConstruted为false时读取numOfCatsGo。数据私有成员weight记录Cat对象的体重。
(2) 友元函数getTotalWeight()的定义如下:
```c++
class Boat;
double getTotalWeight(const Cat& c, const Boat& b);
class Boat {
private:
double weight;
public:
Boat(double w = 0) : weight(w) {}
friend double getTotalWeight(const Cat& c, const Boat& b);
};
double getTotalWeight(const Cat& c, const Boat& b) {
return c.weight + b.weight;
}
```
在这里,我们定义一个友元函数getTotalWeight(),可以访问Cat和Boat类的私有成员变量。由于这个函数需要同时访问Cat和Boat类的私有成员变量,因此我们需要将这个函数声明为Cat和Boat类的友元函数。在函数中,我们将Cat对象和Boat对象的体重相加并返回。
阅读全文