65,210
社区成员
发帖
与我相关
我的任务
分享template <typename T, int n>
class A
{
public:
A(T t);
T& operator [](int i);
T operator [](int i) const;//什么时候才调用该函数?
private:
T array[n];
};
template <typename T, int n>
A<T,n>::A(T t)
{
for(int i = 0;i < n;i++)
{
array[i] = t;
}
}
template <typename T, int n>
T& A<T,n>::operator [](int i)
{
cout<<"!const"<<endl;
if(i < n)
return array[i];
cout<<"error!"<<endl;
}
template <typename T, int n>
T A<T, n>::operator[](int i) const
{
cout<<"const"<<endl;
if(i < n)
return array[i];
cout<<"error!"<<endl;
}
#include <iostream>
using namespace std;
template <typename T, int n>
class A
{
public:
A(T t);
T& operator [](int i);
const T& operator [](int i) const;//一般是这种形式
private:
T array[n];
public:
void print_array() const
{
cout<<(*this)[0]<<endl;
}
};
template <typename T, int n>
A<T,n>::A(T t)
{
for(int i = 0;i < n;i++)
{
array[i] = t;
}
}
template <typename T, int n>
T& A<T,n>::operator [](int i)
{
cout<<"!const"<<endl;
if(i < n)
return array[i];
cout<<"error!"<<endl;
}
template <typename T, int n>
const T& A<T, n>::operator[](int i) const
{
cout<<"const"<<endl;
if(i < n)
return array[i];
cout<<"error!"<<endl;
}
class B
{
private:
A<int,3> m;
public:
B():m(4)
{
}
int get() const
{
return m[0];
}
};
int main()
{
A<int ,5> a(33);
int n = 4+a[3];//非const
a[2] = 6;//非const
a.print_array();//const
B b;
b.get();//const
return 0;
}
int main(int argc, char *argv[])
{
A<float, 4> a(0.0);
A<int, 4> b(2);
a[1] = 2.0;
float t = a[1];
cout<<a[1]<<endl;
const int d = b[1];
cout<<b[1]<<endl;
system("PAUSE");
return 0;
}T& operator [](int i); //作左值,改变类成员的时候调用~
T operator [](int i) const;//作右值
//但是可以用T operator [](int i) const;的地方都可以使用T operator [](int i);