运算符重载中的二维数组下标重载问题

https://www.cnblogs.com/XiaoXiaoShuai-/p/10753787.html
int * operator[](int i){
return arr[i];
}
重载强制类型转换运算符时应该注意:
如:operator int(){
}
无须在Operator前再次声明类型
以二维矩阵为例:
有如下调试程序:
重载了() 二位数组下标, 强制类型转换,赋值等运算符
#include
using namespace std;
/*
练习() [] = float()
重载
/
class DMatrix{
int row;
int col;
int **matrix;
public:
DMatrix() {
row = 0;
col = 0;
matrix = NULL;
}
DMatrix(int r1,int c1,int *mat) {
row = r1;
col = c1;
matrix = new int
[row];
for (int i = 0; i < row; i++) {
(matrix + i) = new int[col];
}
for (int i = 0; i < row; i++) {
for (int j = 0; j < col;j++) {
((matrix+i)+j)=
(
(mat+i)+j);
// cout<<mat[i][j]<<" ";
}
//cout<<endl;
}
}
void print() {
for (int i = 0; i < row; i++) {
for (int j = 0; j<col;j++){
if(j!=col-1)
cout << ((matrix+i)+j) << " ";
else
cout<<((matrix+i)+j)<<endl;
}
}
}
DMatrix & operator= (const DMatrix &dm){
if(matrix!=NULL){
for(int i=0;i<row;i++){
delete [] (matrix+i);
}
delete [] matrix;
matrix = NULL;
}
row = dm.row;
col = dm.col;
/

cout<<"row== "<<row<<endl;
cout<<"col== "<<col<<endl;
system(“pause”);
/
matrix = new int
[row];
for(int i=0;i<row;i++){
(matrix+i) = new int[col];
}
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
//system(“pause”);
((matrix+i)+j) = ((dm.matrix+i)+j);
//cout<<
(*(matrix+i)+j)<<endl;
}
}
return *this;
}
DMatrix operator+ (const DMatrix &dm)const{
int *arr = new int[row];
for(int i=0;i<row;i++){
(arr+i) = new int[col];
}
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
arr[i][j] = dm.matrix[i][j]+matrix[i][j];
}
}
return DMatrix(row,col,arr);
}
int
operator[](int i){
return matrix[i];
}
//重载强制类型转换
operator int(){
return row;
}
//重载括号
DMatrix& operator()(int x,int y){
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
matrix[i][j] *= x;
matrix[i][j] += y;
}
}
return *this;
}
~DMatrix(){
if(matrix!=NULL){
for(int i=0;i<row;i++)
delete [] *(matrix+i);
delete []matrix;
matrix = NULL;
}
}
};
int main() {
//请输入行数和列数,然后输入矩阵
int r1,c1;
int *mat;
cout<<“请输入行数和列数:”<<endl;
cin>>r1>>c1;
mat = new int
[r1];
for(int i=0;i<r1;i++){
*(mat+i) = new int[c1];
}
cout<<“请输入矩阵:”<<endl;
for(int i=0;i<r1;i++){
for(int j=0;j<c1;j++){
cin>>mat[i][j];
}
}
DMatrix matlab(r1, c1, mat);
// matlab.print();
DMatrix m1;
m1 = matlab;
// m1.print();

/*等号测试
matlab = m1+matlab;
matlab.print();
*/

/*
下标测试
int m,n;
cout<<“输入查询元素的下标:”<<endl;
cin>>m>>n;
cout<<m1[m-1][n-1]<<endl;
/
/

类类型-整形类型
int a = int(m1);
cout<<“a的值:”<<a<<endl;
/
/

重载括号运算符
*/
int x,y;
cout<<“输入X,Y:”<<endl;
cin>>x>>y;
matlab(x,y).print();
return 1;
}

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值