这是我的任务:
实现模板类cuboid,其中尺寸(宽度,长度和高度)可以是任何数据类型。 cuboids的数组也可以是模板函数的参数,因此需要重载所需的运算符。 编写主程序,其中将声明cuboids数组,并使用数据类型float的维度进行初始化。
这是我的代码:
#include <iostream>
using namespace std;
template <class T>
class cuboid{
private:
T length, width, height;
cuboid *arr;
int length_of_array;
public:
cuboid();
cuboid(cuboid*, int);
cuboid(T, T, T);
~cuboid();
T volume(cuboid);
cuboid& operator = (const cuboid&);
};
template <class T>
cuboid<T>::cuboid(){
}
template <class T>
cuboid<T>::cuboid(cuboid *n, int len){
length_of_array = len;
arr = new cuboid <T> [length_of_array];
for(int i = 0; i < length_of_array; i++){
arr[i] = n[i];
}
}
template <class T>
cuboid<T>::cuboid(T o, T s, T v){
length = o;
width = s;
height = v;
}
template <class T>
cuboid<T>::~cuboid(){
delete [] arr;
arr = 0;
}
template <class T>
T cuboid<T>::volume(cuboid b){
if(length * width * height > b.length * b.width * b.height){
return length * width * height;
}
else{
return b.length * b.width * b.height;
}
}
template <class T>
cuboid<T> & cuboid<T>::operator=(const cuboid& source){
length = source.length;
width = source.width;
height = source.height;
return *this;
}
int main(){
int length;
float a, b, c;
cout << "How many cuboids array has? " << endl;
cin >> length;
cuboid<float> *arr;
arr = new cuboid <float> [length];
for(int i = 0;i < length; i++){
cin >> a >> b >> c;
arr[i] = cuboid <float> (a,b,c);
}
cuboid <float> n(arr, length);
}
我成功编译了它,但是一旦我开始输入数组对象的维度,程序就会崩溃。有什么想法吗?
提前致谢。
编辑:我修改了原始代码(和问题的表述),它是长方体而不是矩形答案 0 :(得分:1)
问题在于这行代码(以及析构函数):
override func didMoveToView(view: SKView) {
dateLabel.zPosition = 22
dateLabel.fontName = "Krungthep"
dateLabel.fontColor = UIColor.whiteColor()
dateLabel.fontSize = 17
dateLabel.text = NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: NSDateFormatterStyle.FullStyle, timeStyle: NSDateFormatterStyle.NoStyle)
dateLabel.position = CGPointMake(self.size.width / 2.0, self.size.height / 1.1)
self.addChild(dateLabel)
}
override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
var touch: UITouch = touches.first as! UITouch
var location = touch.locationInNode(self)
var node = self.nodeAtPoint(location)
if node.name == "next" {
//next day
}
if node.name == "before" {
//previous day
let earlyDate = NSCalendar.currentCalendar().dateByAddingUnit(NSCalendarUnit.CalendarUnitDay,value: -1,toDate:
NSDate(),options: NSCalendarOptions.WrapComponents)
date.earlierDate(earlyDate!)
}
它使用构造函数在堆栈上分配新的矩形对象,该构造函数不分配arr[i] = rectangle <float> (a,b,c);
数组(根据您的实现存储在堆上)。
在之后调用析构函数:
arr
尝试template <class T>
rectangle<T>::~rectangle() {
std::cout << "D1" << std::endl;
delete[] arr;
arr = 0;
}
delete[]
,尽管在这种情况下它还没有被分配。
一种解决方案是修复析构函数,以便考虑到这种情况。