C++对象做成员变量(无师自通)
有时将一个类的对象嵌套在另一个类中是很有用的。例如,来看以下声明:
图 1 对象组合
下面的程序使用了这两个类来创建计算地毯销售价格:
另外值得注意的是,在第 43、44 和 48 行中,Carpet 类函数如何调用 Rectangle 函数。正如用户程序通过 Carpet 对象的名称调用 Carpet 函数一样,Carpet 类函数必须通过其 Rectangle 对象的名称调用 Rectangle 函数。在第 35 行中定义的 Rectangle 对象被命名为 size,这就是为什么 Carpet 函数使用以下语句来调用它:
class Rectangle { private: double length; double width; public: void setLength(double); void setWidth(double); double getLength(); double getWidth(); double getArea(); }; class Carpet { private: double pricePerSqYd; Rectangle size; // size 是 Rectangle 类的实例 public: void setPricePerYd(double p); void setDimensions(double l, double w); double getTotalPrice(); };请注意,Carpet 类有一个名为 size 的成员变量,它是 Rectangle 类的一个实例。Carpet 类可以使用此对象来存储房间尺寸并计算购买地毯的面积。图 1 说明了两个类是如何相关的。当一个类被嵌套在另一个类中时,称为对象组合。
图 1 对象组合
下面的程序使用了这两个类来创建计算地毯销售价格:
#include <iostream> using namespace std; class Rectangle { private: double length; double width; public: void setLength(double len) { length = len; } void setWidth(double wid) { width = wid; } double getLength() { return length; } double getWidth() { return width; } double getArea() { return length * width; } }; class Carpet { private: double pricePerSqYd; Rectangle size; public: void setPricePerYd(double p) { pricePerSqYd = p; } void setDimensions(double len, double wid) { size.setLength(len/3); // Convert feet to yards size.setWidth (wid/3); } double getTotalPrice() { return (size.getArea() * pricePerSqYd); } }; int main() { Carpet purchase; double pricePerYd; double length; double width; cout << "Room length in feet: "; cin >> length; cout << "Room width in feet : "; cin >> width; cout << "Carpet price per sq.yard: "; cin >> pricePerYd; purchase.setDimensions(length, width); purchase.setPricePerYd(pricePerYd); cout << "\nThe total price of my new " << length << " x " << width << " carpet is $" << purchase.getTotalPrice() << endl; return 0; }程序运行结果:
Room length in feet: 16.5
Room width in feet : 12
Carpet price per sq.yard: 22,49
The total price of my new 16.5 x 12 carpet is $494.78
另外值得注意的是,在第 43、44 和 48 行中,Carpet 类函数如何调用 Rectangle 函数。正如用户程序通过 Carpet 对象的名称调用 Carpet 函数一样,Carpet 类函数必须通过其 Rectangle 对象的名称调用 Rectangle 函数。在第 35 行中定义的 Rectangle 对象被命名为 size,这就是为什么 Carpet 函数使用以下语句来调用它:
size.getArea()
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算