我正在撰寫 Matrix 類并到了需要創建 Array 物件陣列的地步,但是 Array 不能有沒有引數的建構式(它需要 m 引數來為其分配記憶體)。我搜索并沒有找到解決方案,人們只建議用 Vector 物件來做,但我不能用陣列以外的任何東西來做。然后一個朋友給我發了對他們有用的矩陣建構式,但即使他們也不知道它為什么會起作用。
Matrix::Matrix(int n, int m):n(n),m(m) {
srand(time(0));
this->data=new Array(n);
for(int i=0; i<n; i ){
this->data[i].m=this->m;
this->data[i].data=new int[m];
for(int j=0; j<this->m; j ){
this->data[i].data[j]= rand()%10;
}
}
}
我不明白這this->data[i]是如何定義的?[] 運算子不會在任何地方多載,并且資料只是單個 Array 物件而不是 Array-s 的陣列。那么為什么以及如何作業而不是編譯錯誤?
源檔案:
標題:
#define ROK04_ROK04_H
class Array{
protected:
int* data;
int m;
public:
Array(int m);
Array& operator = (const Array& a);
virtual ~Array();
Array& operator =(const Array& a);
virtual void setElem(int pos, int value);
virtual void print() const;
friend class Matrix;
};
class Matrix{
protected:
Array* data;
int n;
int m;
public:
Matrix(int n, int m);
};
#endif //ROK04_ROK04_H ```
#ifndef ROK04_ROK04_H
#define ROK04_ROK04_H
class Array{
protected:
int* data;
int m;
public:
Array(int m);
Array& operator = (const Array& a);
virtual ~Array();
Array& operator =(const Array& a);
virtual void setElem(int pos, int value);
virtual void stampa() const;
friend class Matrix;
};
class Matrix{
protected:
Array* data;
int n;
int m;
public:
Matrix(int n, int m);
void stampaj();
};
#endif //ROK04_ROK04_H
價格:
#include <iostream>
#include <ctime>
#include "rok04.h"
using namespace std;
Array::Array(int m):m(m),data( new int[m]() ){}
Array& Array::operator=(const Array& a) {
cout << "Usao" << this << endl;
for(int i = 0; i < m; i ){
data[i] = a.data[i];
}
return *this;
}
Array::~Array() {
delete[] data;
}
void Array::setElem(int pos, int value) {
try {
if(pos >= m){
cout << "Usao\n";
throw out_of_range("Index out of bounds!");
}
data[pos] = value;
} catch (out_of_range& oor){
cerr << oor.what() << endl;
}
}
void Array::print() const {
// cout << m;
for (int i = 0; i < m; i) {
cout << data[i] << " ";
}
cout << endl;
}
Array &Array::operator =(const Array& a) {
int* temp = new int(m a.m);
for(int i = 0; i < m; i ){
temp[i] = data[i];
}
for (int i = m; i < m a.m; i) {
temp[i] = a.data[i-m];
}
delete[] data;
data = temp;
m = m a.m;
return *this;
}
Matrix::Matrix(int n, int m):n(n),m(m) {
srand(time(0));
this->data=new Array(n);
for(int i=0; i<n; i ){
this->data[i].m=this->m;
this->data[i].data=new int[m];
for(int j=0; j<this->m; j ){
this->data[i].data[j]= rand()%10;
}
}
}
uj5u.com熱心網友回復:
你有這個定義:int* data. 所以默認情況下,給定一個指標運算元,由 C 編譯器data[x]翻譯成。*(data x)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/411694.html
標籤:
上一篇:操作員=減慢模擬
下一篇:C Win32獲取注冊表項
