【小白求助】关于动态数组类的两个问题
谢谢您能够点进来!学习C++的时候遇到了关于动态数组类的两个问题一个是在动态数组类的复制构造函数(/ArrayOfCircle.cpp)里面会出现以下两个提示:
警告 C6385 从“Circles”中读取的数据无效: 可读大小为“(unsigned int)*8+4”个字节,但可能读取了“16”个字节。
警告 C26444 避免使用具有自定义构造和析构的未命名对象(es.84)。
虽然程序可以运行,但是被复制出来的对象的输出结果是一串随机的数字
第二个是在主函数里面:
ArrayOfCircle CircleArray(2);
CircleArray.element(0).SetRadius(2);
CircleArray.element(1).SetRadius(1);
我创建了一个动态数组,但是里面的两个元素似乎是指向了同一个地址,最后输出两个元素的半径,结果都是1.
并且程序运行后会出现如下的弹窗
下面是代码:
//SimpleCircle.h
#pragma once
class SimpleCircle
{
public:
SimpleCircle() :Radius(0) {};
~SimpleCircle();
void SetRadius(int R);
int GetRadius();
float GetArea();
SimpleCircle operator=(const SimpleCircle& v);
void swap(SimpleCircle* a, SimpleCircle* b)
{
SimpleCircle *temp1,*temp2;
temp1 = a;
temp2 = b;
a = temp2;
b = temp1;
}
private:
int Radius;
const float PI = 3.14159f;
};
//SimpleCircle.cpp
#include "SimpleCircle.h"
#include<algorithm>
using namespace std;
SimpleCircle::SimpleCircle() {};
SimpleCircle::~SimpleCircle() {};
void SimpleCircle::SetRadius(int R)
{
Radius = R;
}
int SimpleCircle::GetRadius()
{
return Radius;
}
float SimpleCircle::GetArea()
{
return Radius * Radius * PI;
}
SimpleCircle SimpleCircle::operator=(const SimpleCircle& v)
{
if (this != &v)
{
SimpleCircle C(v);
swap(&C, this);
return *this;
}
else return *this;
}
//ArrayOfCircle.h
#pragma once
#include"SimpleCircle.h"
#include <cassert>
class ArrayOfCircle
{
public:
ArrayOfCircle(int sz);
ArrayOfCircle(const ArrayOfCircle& v);
~ArrayOfCircle();
SimpleCircle& element(int index)
{
assert(index >= 0 && index < size);
return Circles[size];
}
private:
int size;
SimpleCircle* Circles;
};
//ArrayOfCircle.cpp
#include "ArrayOfCircle.h"
#include<iostream>
using namespace std;
ArrayOfCircle::ArrayOfCircle(int sz)
{
size = sz;
Circles = new SimpleCircle[size];
}
ArrayOfCircle::ArrayOfCircle(const ArrayOfCircle& v)
{
size = v.size;
Circles = new SimpleCircle[size];
int i= 0 ;
for ( ; i <size; i++)
Circles[i] = v.Circles[i];
}
ArrayOfCircle::~ArrayOfCircle()
{
cout << "Deleting..." << endl;
delete[] Circles;
}
//源.cpp
#include"SimpleCircle.h"
#include"ArrayOfCircle.h"
#include<iostream>
using namespace std;
int main()
{
ArrayOfCircle CircleArray(2);
CircleArray.element(0).SetRadius(2);
CircleArray.element(1).SetRadius(1);
ArrayOfCircle CircleArray1(CircleArray);
cout << CircleArray.element(0).GetRadius() << endl;
cout << CircleArray.element(1).GetRadius() << endl;
cout << CircleArray1.element(0).GetRadius() << endl;
cout << CircleArray1.element(1).GetRadius() << endl;
return 0;
}
以上。
不知道是哪里出了问题,希望有知道的人能够帮忙解答,谢谢!