Sure, here's an example program that meets the requirements you've listed:
```cpp
#include <iostream>
#include <string>
using namespace std;
class ShippingBox {
private:
double length, width, height, mass, price;
string senderName, receiverName, senderAddress, receiverAddress, originCountry, destinationCountry;
public:
// default constructor
ShippingBox() {
length = width = height = mass = price = 0.0;
senderName = receiverName = senderAddress = receiverAddress = originCountry = destinationCountry = "";
}
// user constructor
ShippingBox(string sName, string sAddress, string oCountry) {
senderName = sName;
senderAddress = sAddress;
originCountry = oCountry;
// set other parameters to default values
receiverName = receiverAddress = destinationCountry = "";
length = width = height = mass = price = 0.0;
}
// volume function
double volume() {
return length * width * height;
}
// surface area function
double surfArea() {
return 2 * (length * width + length * height + width * height);
}
// girth function
double girth() {
double x = min(min(length, width), height);
if (x == length) return 2 * (width + height);
else if (x == width) return 2 * (length + height);
else return 2 * (length + width);
}
// max dimension function
double maxDim() {
return max(max(length, width), height);
}
// pricing function
double pricing() {
// pricing table based on destination country
if (destinationCountry == "USA") {
if (mass < 10) return 5.0;
else if (mass < 20) return 8.0;
else return 10.0;
} else if (destinationCountry == "Canada") {
if (mass < 10) return 7.0;
else if (mass < 20) return 10.0;
else return 12.0;
} else {
if (mass < 10) return 10.0;
else if (mass < 20) return 15.0;
else return 20.0;
}
}
// operator+ function
double operator+(const ShippingBox& other) {
return pricing() + other.pricing();
}
// operator>> function
friend istream& operator>>(istream& input, ShippingBox& box) {
cout << "Enter sender name: ";
getline(input, box.senderName);
cout << "Enter sender address: ";
getline(input, box.senderAddress);
cout << "Enter origin country: ";
getline(input, box.originCountry);
cout << "Enter receiver name: ";
getline(input, box.receiverName);
cout << "Enter receiver address: ";
getline(input, box.receiverAddress);
cout << "Enter destination country: ";
getline(input, box.destinationCountry);
cout << "Enter length: ";
input >> box.length;
cout << "Enter width: ";
input >> box.width;
cout << "Enter height: ";
input >> box.height;
cout << "Enter mass: ";
input >> box.mass;
cout << "Enter price: ";
input >> box.price;
return input;
}
// operator<< function
friend ostream& operator<<(ostream& output, const ShippingBox& box) {
output << "Sender: " << box.senderName << ", " << box.senderAddress << ", " << box.originCountry << endl;
output << "Receiver: " << box.receiverName << ", " << box.receiverAddress << ", " << box.destinationCountry << endl;
output << "Dimensions (LxWxH): " << box.length << " x " << box.width << " x " << box.height << endl;
output << "Mass: " << box.mass << " kg" << endl;
output << "Price: $" << box.price << endl;
output << "Volume: " << box.volume() << " cubic meters" << endl;
output << "Surface area: " << box.surfArea() << " square meters" << endl;
output << "Girth: " << box.girth() << " meters" << endl;
output << "Max dimension: " << box.maxDim() << " meters" << endl;
output << "Shipping cost: $" << box.pricing() << endl;
return output;
}
};
int main() {
ShippingBox box1("John Smith", "1234 Main St, Anytown USA", "USA");
ShippingBox box2;
cout << "Enter information for box 2:" << endl;
cin >> box2;
cout << endl << "Shipping label for box 1:" << endl << box1 << endl;
cout << "Shipping label for box 2:" << endl << box2 << endl;
double totalCost = box1 + box2;
cout << "Total shipping cost: $" << totalCost << endl;
return 0;
}
```
This program defines a `ShippingBox` class with the attributes and functions you've specified. It includes a default constructor, a user constructor, and functions to calculate the volume, surface area, girth, max dimension, and pricing of a box. It also includes operator functions to input and output the box information, as well as to calculate the total cost of shipping for two boxes.
Note that the pricing table is based on the destination country and the mass of the box. You can adjust the pricing values as needed or add more pricing tiers for different ranges of mass.