一、重载 左移 << 运算符
1、左移 << 运算符作用
左移运算符重载 , 可参考 【C 】运算符重载 ⑧ ( 左移运算符重载 | 友元函数 / 成员函数 实现运算符重载 | 类对象 使用 左移运算符 ) 博客 ;
左移运算符 用于 cout << s1 << endl
语句中 , 将 s1 对象输出到 cout 标准输出流中 , 这是
2、重载 左移 << 运算符
使用 全局函数 实现 左移运算符 << 重载 :
- 首先 , 写出函数名 ,
cout << s1
左移操作符重载 , 函数名规则为 " operate " 后面跟上要重载的运算符 , 函数名是operate<<
;
operate<<
- 然后 , 根据操作数 写出函数参数 , 参数一般都是 对象的引用 ;
cout << s1
左操作数是 ostream cout 标准输出流 , 参数中是引用类型 ;cout << s1
右操作数是 String s 类对象 , 参数中是引用类型 ;
operator<<(ostream& out, String& s)
- 再后 , 根据业务完善返回值 , 返回值可以是 引用 / 指针 / 元素 ; 此处返回 void 即可 ; 返回 ostream& 引用类型 , 是为了支持链式调用 cout << s1 << endl;
ostream& operator<<(ostream& out, String& s)
- 最后 , 实现函数体 , 编写具体的运算符操作业务逻辑 ;
// 全局函数 中实现 String 左移运算符重载
// 返回 ostream& 引用类型 , 是为了支持链式调用 cout << s1 << endl;
ostream& operator<<(ostream& out, String& s)
{
cout << "调用重载 左移 << 操作符函数 ostream& operator<<(ostream& out, String& s)" << endl;
// 在函数体中将 String 对象的 m_p 指针指向的数据输出到 out 输出流中
out << s.m_p << endl;
// 该返回值还需要当左值使用
return out;
}
同时 , 还要在 String 类中 , 将上述函数声明为 String 类的 友元函数 ;
代码语言:javascript复制class String
{
// 使用 全局函数 实现 左移运算符 << 重载
// 将全局函数 声明为 String 的友元函数
friend ostream& operator<<(ostream& out, String& s);
}
二、自定义类使用技巧
1、直接访问类的私有指针成员
在开发中 , 自定义了一个 class 类 , 其中定义了 指针 类型的 成员变量 ;
一般情况下 , 成员变量 都要 声明为 私有 private 的 ;
如果要 直接是使用 私有的指针变量 ,
可以通过 public 函数获取 私有成员 ;
代码语言:javascript复制class String
{
public:
// 获取私有成员 char* m_p
char* str()
{
return this->m_p;
}
// 获取私有成员 int m_len
int len()
{
return this->m_len;
}
private:
// 字符串长度 , 不包括 '