问题描述
我需要一些围绕C ++动态数组的包装器,因此需要一个具有以下属性的类:
class Dyn_array {
std::string name;
int length;
int* head;
}
我还必须重载*
/ *=
运算符,但由于已经提到了错误,所以我无法返回结果,可能是构造函数/析构函数的问题:要么我调用一些析构函数两次,或更可能是2个实例共享一个指针。是的,缩进是错误的,我不知道emacs为何会这样。
#include <iostream>
#include <string>
class Dyn_array {
std::string name;
int length;
int* head;
public:
Dyn_array()
: name("UnkNown"),length(0),head(nullptr)
{
std::cout << "Default constructor of " << name << " is being used.\n";
}
Dyn_array(std::string n_name,int n_length)
: name(n_name),length(n_length),head(new int[n_length])
{
for (int i = 0; i < n_length; i++) {
head[i] = 0;
}
std::cout << "Constructor with parameters of " << name << " is being used.\n";
}
void add(int n_element) {
if (head) {
head[length] = n_element;
}
else {
head = new int(n_element);
}
length++;
}
Dyn_array(std::string n_name,int* array,int size)
: name(n_name),head(nullptr)
{
for (int i = 0; i < size; i++) {
add(array[i]);
}
std::cout << "Constructor with array of " << name << " is being used.\n";
}
~Dyn_array() {
if (head) {
delete[] head;
head = nullptr;
length = 0;
}
std::cout << "Destructor of " << name << " with address " << head << " is being used.\n";
}
int& operator[](int i) {
return head[i];
}
int operator[](int i) const {
return head[i];
}
Dyn_array(const Dyn_array& rhs) {
(*this).~Dyn_array();
std::cout << "copy constructor is being used.\n";
for (int i = 0; i < rhs.length; i++) {
add(rhs[i]);
}
}
Dyn_array& operator*= (const Dyn_array& rhs) { // HERE------------
Dyn_array temp; // Creating an instance to store result
for (int i = 0; i < length; i++) {
bool check = false;
for (int j = 0; i < rhs.length; i++) {
if (head[i] == rhs.head[j]) {
check = true;
}
}
if (check) {
temp.add(head[i]);
}
}
temp.add(53); // For debugging
(*this) = Dyn_array(temp); // copy constructor calling
return (*this);
}
void print() {
if (head) {
for (int i = 0; i < length; i++) {
std::cout << head[i] << " ";
}
std::cout << '\n';
}
else {
std::cout << "Array is empty.\n";
}
}
};
int main() {
int arr1[3] = {1,2,3};
int arr2[4] = {1,3,4};
Dyn_array a("first",arr1,3);
Dyn_array b("second",arr2,4);
a.print();
b.print();
b *= a;
a.print();
b.print();
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)