都在我应该创建指针的对象矢量对象指针,一般帮助和混乱
后来就停机负载载体的家庭作业,我将使用继承/多态性延长该课程包括两天交付费用,第二天的空气等等。但是,这不是我现在关心的问题。当前程序的最终目标是打印矢量中的每个对象的内容(名称&地址)并查找其运输成本(重量*成本)。
我的麻烦不在于逻辑,我只是在与对象/指针/向量相关的一些点上感到困惑。但首先我的代码。我基本上删除了现在不需要的所有东西,int main,会有用户输入,但现在我硬编码了两个例子。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Package {
public:
Package(); //default constructor
Package(string d_name, string d_add, string d_zip, string d_city, string d_state, double c, double w);
double calculateCost(double, double);
~Package();
private:
string dest_name;
string dest_address;
string dest_zip;
string dest_city;
string dest_state;
double weight;
double cost;
};
Package::Package()
{
cout<<"Constucting Package Object with default values: "<<endl;
string dest_name="";
string dest_address="";
string dest_zip="";
string dest_city="";
string dest_state="";
double weight=0;
double cost=0;
}
Package::Package(string d_name, string d_add, string d_zip, string d_city, string d_state, string r_name, string r_add, string r_zip, string r_city, string r_state, double w, double c){
cout<<"Constucting Package Object with user defined values: "<<endl;
string dest_name=d_name;
string dest_address=d_add;
string dest_zip=d_zip;
string dest_city=d_city;
string dest_state=d_state;
double weight=w;
double cost=c;
}
Package::~Package()
{
cout<<"Deconstructing Package Object!"<<endl;
delete Package;
}
double Package::calculateCost(double x, double y){
return x+y;
}
int main(){
double cost=0;
vector<Package*> shipment;
cout<<"Enter Shipping Cost: "<<endl;
cin>>cost;
shipment.push_back(new Package("tom r","123 thunder road", "90210", "Red Bank", "NJ", cost, 10.5));
shipment.push_back(new Package ("Harry Potter","10 Madison Avenue", "55555", "New York", "NY", cost, 32.3));
return 0;
}
所以我的问题是:
- 我被告知我必须使用对象指针,而不是对象的矢量 。 为什么?我的任务特别要求它 ,但我也告诉它 不会工作,否则。
- 我应该在哪里创建这个 矢量? 它应该是我的包 类的一部分吗?那么我该如何去添加 对象呢?
我是否需要复制构造函数?为什么?
什么是解构对象指针的向量的正确方法 ?
任何帮助,将不胜感激。我在这里搜索了很多相关的文章,我意识到我的程序会有内存泄漏。使用boost ::中的一个专用ptrs将无法供我使用。现在,我更关心如何建立我的程序的基础。这样我就可以真正理解我需要创建的功能。
谢谢。
*附注* Package中的析构函数是错误的,不会被编译。你尝试编译它吗? –
我居然拿出来编译它。在这个代码示例中忘了这么做。 – Staypuft