#include <iostream>
using namespace std;
class Person {
public: //使用this指针,防止参数与成员变量混淆
Person(const std::string& name, const std::string& address)
{
this->name = name;
this->address = address;
}
std::string getName() const
{
return this->name;
}
std::string getAddress() const
{
return this->address;
}
private:
std::string name;
std::string address;
};
class Screen
{
public:
typedef std::string::size_type index;
Screen(index ht=0,index wd=0):contents(ht*wd,'A'),cursor(0),height(ht),width(wd)
{}
char get() const { return contents[cursor]; }
char get(index r, index c) const
{
index row = r * width;
return contents[row + c];
}
Screen& move(index r, index c);
Screen& set(index, index, char);
Screen& set(char c);
//基于const进行重载
const Screen& display(std::ostream &os) const
{
++access_ctr;
do_display(os);
return *this;
}
Screen& display(std::ostream& os)
{
do_display(os);
return *this;
}
private:
std::string contents;
index cursor;
index height, width;
mutable size_t access_ctr; //可变的数据成员,可以被const函数修改
void do_display(std::ostream& os) const
{
os << contents;
}
};
Screen& Screen::set(index r, index c, char ch) //改变指定位置坐标的值
{
index row = r * width;
contents[row + c] = ch;
return *this; //*是间接引用
}
Screen& Screen::set(char c) //改变当前坐标位置的值
{
contents[cursor] = c;
return *this; //*是间接引用
}
Screen& Screen::move(index r, index c) //移动光标位置,返回值为Screen类的引用
{
index row = r * width;
cursor = row + c;
return *this; //*是间接引用
}
int main()
{
Person p("张飞", "花园街5号");
Person p2("刘备", "花园街6号");
cout << p.getName() << endl;
cout << p2.getName() << endl;
Screen myScreen(5, 3);
cout << myScreen.get() << endl;
myScreen.set(3, 2, 'B');
cout << myScreen.get(3, 2) << endl;
//第一种移动方法
myScreen.move(2, 3);
myScreen.set('C');
myScreen.move(2, 3).set('C').display(cout).set('K').display(cout);
cout << endl;
myScreen.move(4, 0).set('X').move(4, 1).set('Y').display(cout);
cout << endl;
cout << myScreen.get() << endl;
myScreen.display(cout);
return 0;
}
C++-this指针-const重载
于 2022-04-04 16:44:13 首次发布