712堆对象与构造画韶 class goods private char Name[21]; int Amount; float price: float Total valuer public: GOods({∥缺省构造函数。 因已有构造函数,系统不会自动生成,必须显式说明。 CGoods(char* name, int amount, float price)t strcpy Name, name); Amount=amount; Price=pricei Total_ value=price*amount 心画
7.1.2 堆对象与构造函数 class Cgoods { private: char Name[21]; int Amount; float Price; float Total_value; public: CGoods() { }; //缺省构造函数。 //因已有构造函数,系统不会自动生成,必须显式说明。 CGoods(char* name, int amount , float price) { strcpy(Name,name); Amount=amount; Price=price; Total_value=price*amount; } …… }
712堆对象与构造菡数 下面注意如何使用: void maino d int n; CGoods *pc, * pcl, *pc2 pc= new GOods(“夏利2000”,10,118000) ∥调用三参数构造函数 pc1= new Goods(;//调用缺省构造函数 cout<<“输入商品类数组元素数”<<endl CIn>> ni pc2 new GOods[n]i ∥动态建立数组,不能初始化,调用n次缺省构造函数 delete pcr delete pc1; delete [pc2; 这里再次强调:由堆区创建对象数组,只能调用缺省的 构造函数,不能调用其他任何构造函数
7.1.2 堆对象与构造函数 下面注意如何使用: void main() { int n; CGoods *pc, *pc1, *pc2; pc = new CGoods(“夏利2000” ,10,118000); //调用三参数构造函数 pc1 = new CGoods(); //调用缺省构造函数 cout << “输入商品类数组元素数” << endl; cin >> n; pc2 = new CGoods[n]; //动态建立数组,不能初始化,调用n次缺省构造函数 …… delete pc; delete pc1; delete []pc2; } 这里再次强调:由堆区创建对象数组,只能调用缺省的 构造函数,不能调用其他任何构造函数
71.3拷贝与深拷贝 缺省拷贝构造函数,可用一个类对象初始化另一个 类对象,称为缺省的按成员拷贝,而不是对整个类对象 的按位拷贝。这称为浅拷贝。 堆对 P 堆对 象 象 拷贝前 拷贝后 图71浅拷贝 心画
7.1.3 浅拷贝与深拷贝 缺省拷贝构造函数,可用一个类对象初始化另一个 类对象,称为缺省的按成员拷贝,而不是对整个类对象 的按位拷贝。这称为浅拷贝。 P 堆 对 象 堆 对 象 P P 图7.1 浅拷贝 拷贝前 拷贝后