C++函数调用操作符重载()
C++ 重载 操作符 函数调用
2023-09-14 09:09:31 时间
#include <iostream>
#include <string>
using namespace std;
class Array
{
public:
Array(){ len1=0; len2=0;num=NULL;};
Array(int m,int n);
int &operator ()(int ,int );
const int &operator ()(int ,int ) const;
int getlen1()const {return len1;}
int getlen2()const {return len2;}
private:
int len1;
int len2;
int *num;
};
Array::Array(int m, int n) {
int size=m*n;
try{
num= new int [size];
}
catch (bad_alloc)
{
cerr<<"allocate storage failure !"<<endl;
throw;
}
len1=m;
len2=n;
}
int & Array::operator()(int i, int j) {
if (i < 0 || i >= len1)
throw string("数组行溢出");
if (j < 0 || j > len2)
throw string("数组列溢出");
return num[i*len1+j];
}
const int & Array::operator()(int i, int j) const {
if (i < 0 || i >= len1)
throw string("数组行溢出");
if (j < 0 || j > len2)
throw string("数组列溢出");
return num[i*len1+j];
}
int main(){
Array A(3,4);
int i,j;
for (i=0;i<A.getlen1();i++)
for (j=0;j<A.getlen2();j++)
A(i,j)=i*A.getlen2()+j;
for (i=0;i<A.getlen1();i++)
for (j=0;j<A.getlen2();j++)
cout<<A(i,j)<<" ";
cout<<endl;
try
{
cout<< A(5, 3) << endl;
}
catch(string s)
{
cerr<<s<<endl;
}
try
{
cout<< A(5, 3) << endl;
}
catch(string s)
{
cerr<<s<<endl;
}
return 0;
}
在这个例子中,我们定义了一个 Array 类,这个类描述的是一个二维数组。在类中,我们先定义了一个默认构造函数,之后声明了一个带参数的构造函数Array(int m, int n);,两个参数分别表示数组的两个维度值。之后声明了两个函数调用操作符重载函数,分别是:
int & operator()(int, int);
const int & operator()(int, int)const;
因为只有常成员函数才能处理常对象
所以我们依然在类中提供两个版本的函数调用操作符重载函数。我们可以看一下这两个函数的函数定义,在它们的函数体中,我们先是做一个越界检测,当然对于二维数组而言,边界是有两个的,因此有两次边界检测,如果没有越界,则会返回对应的值。
有了这两个函数调用操作符重载函数,我们就可以用 A(i,j) 的形式访问二维数组中的数据了。当我们用 A(i,j) 的形式访问二维数组中的数据时,A(i,j) 会调用类中的函数调用操作符重载函数,此时 A(i,j) 可以理解为:
A.operator()(i, j)
相关文章
- PHP、C++的重载
- 【C/C++学院】0829-位容器multimapmutisetString/算法函数兰不达表达式以及类重载/GPU编程
- C++的函数重载
- C++ 几行代码就能重载操作符模拟 cout<<123<<endl;
- 基于 VC++控制台应用程序:GB28181Test 项目概述
- atitit。gui 界面皮肤以及换肤总结 java .net c++
- C++网络编程汇总
- 除数博弈(C++)
- 【华为OD机试 2023】最左侧冗余覆盖子串(C++ Java JavaScript Python)
- 【华为OD机试 2023】 过滤组合字符串(C++ Java JavaScript Python)
- C++ 必备知识点(一看秒懂),逆袭进大厂,干货满满,全在这里
- (C++部分)若要重载+、=、<<、=和[ ]运算符,则必须作为类成员重载的运算符是
- 对C++中重载(overload)和重写(override)描述正确的有()
- C++每日面试之this 指针
- C++重载()简单操作
- C++运算符重载
- C++——重载运算符和重载函数
- C++ popcount()含义(七十一)
- C++ Primer注意事项11_运算符重载_算术/关系运算符_下标运算符
- 【C++科学计算】解决“ARMADILLO_INCLUDE_DIR-NOTFOUND/armadillo_bits/config.hpp not found!”
- 【C++】第16篇 详解结构化编程方式
- 【C++提高】函数重载遇到函数模板怎么处理?
- C++的学习心得和知识总结 第二章|C++函数基础:默认值、内联和const及函数重载
- 【C++要笑着学】多态 | 重写(覆盖) | 协变构多态 | 父虚子非虚也构多态 | final与override关键字(C++11) | 抽象类 | 纯虚函数 | 抽象类指针
- 【C++要笑着学】缺省参数 | 全缺省与半缺省 | 函数重载