#include<iostream>
using namespace std;
class Girl
{
private:
string m_boys[3];
public:
string m_name;
//默认构造函数
Girl()
{
m_boys[0] = "字都";
m_boys[1] = "磐安";
m_boys[2] = "宋雨";
}
//显示全部男朋友的姓名
void showboyfriend()
{
cout << m_boys[0] << "," << m_boys[1] << "," << m_boys[2] << endl;
}
string& boys(int ii)//函数的返回值是引用,这时可以把函数调用的表达式当成变量来使用。
{
return m_boys[ii];
}
};
int main()
{
Girl g;
g.boys(0) = "wowo"; //把函数调用的表达式当成变量来使用。
cout << "第一任男朋友:" << g.boys(0) << endl;
g.showboyfriend();
}
更好的方式是重载下标运算符
重载下标运算符的第一种语法:
返回值类型 &perator[ ](参数);
这种方式,[ ]不仅可以访问数组元素,还可以修改数组元素。
#include<iostream>
using namespace std;
class Girl
{
private:
string m_boys[3];
public:
string m_name;
//默认构造函数
Girl()
{
m_boys[0] = "字都";
m_boys[1] = "磐安";
m_boys[2] = "宋雨";
}
//显示全部男朋友的姓名
void showboyfriend()
{
cout << m_boys[0] << "," << m_boys[1] << "," << m_boys[2] << endl;
}
string&operator[](int ii)//函数的返回值是引用,这时可以把函数调用的表达式当成变量来使用。
{
return m_boys[ii];
}
};
int main()
{
Girl g;
g[0] = "wowo"; //把函数调用的表达式当成变量来使用。
cout << "第一任男朋友:" << g[0] << endl;
g.showboyfriend();
}
第二种:
const 返回值类型 &operator[ ](参数) const;
这种声明方式,[ ]只能访问而不能修改数组元素。
在实际开发中,我们应该同时提供以上两种形式,这样做是为了适应const对象,因为通过const对象只能调用const成员函数,如果不提供第二种形式,那么将无法访问const对象的任何数组元素。
#include<iostream>
using namespace std;
class Girl
{
private:
string m_boys[3];
public:
string m_name;
//默认构造函数
Girl()
{
m_boys[0] = "字都";
m_boys[1] = "磐安";
m_boys[2] = "宋雨";
}
//显示全部男朋友的姓名
void showboyfriend()
{
cout << m_boys[0] << "," << m_boys[1] << "," << m_boys[2] << endl;
}
string&operator[](int ii)//函数的返回值是引用,这时可以把函数调用的表达式当成变量来使用。
{
return m_boys[ii];
}
const string& operator[](int ii) const
{
return m_boys[ii];
}
};
int main()
{
Girl g;
g[0] = "wowo"; //把函数调用的表达式当成变量来使用。
cout << "第一任男朋友:" << g[0] << endl;
g.showboyfriend();
const Girl g1 = g;//用对象g创建常对象g1。
cout << "第一任男朋友:" << g1[0] << endl;
}