L7---运算符重载,流类库
一,【前言】
1,什么是运算符重载?
2,运算符重载要用什么来表示呢?
3, 如果要能访问另一个类私有成员的方法?
4, 运算符重载的特性?
5,不能重载的运算符有哪些?
思维导图如下:
二,【问题详解】
1,什么是运算符重载?
2,运算符重载要用什么来表示呢?
解答: operator
3, 如果要能访问另一个类私有成员的方法有哪些?
解答:
4, 运算符重载的特性?
解答:
5,不能重载的运算符有哪些?
6,istream和ostream的基类是什么?
解答: 基类是ios
7,流的分类分为 四种, 是哪四种?
解答: cin ,cout, clog, cerr.
8,Myfile文件和myTest.txt文件进行关联,代码怎么写?
解答:
9,关于运算符重载, 完整的实现str类的例子:
#includel<iostream>
#include<string>
Usingnamespace std;
Class str{
Private:
Chat *st;
Public:
Str(char *s); //使用字符指针的构造函数
Str(str &s); //使用对象引用的构造函数
Str & operator=(str & a); //重载使用”对象引用”的赋值运算符
Str& operator=(char *s); //重载使用”指针”的赋值运算符
Void print(){cout<<st<<endl;} //输出字符
~str() {delete st;}
};
Str :: str(char *s)
{
St=new char[strlen(s)+1]; //为st申请内存
Strcpy(str, s); //将字符串s复制到内存区st
}
Str:: str(str &a)
{
Str=newchar[strlen(a.st)+1]; //为st申请内存
strcpy(st, a.st); //将对象a的字符复制到内存区st
}
str& str::operator=(str& a)
{
If(this==&a) //防止 a=a 这样的赋值
return * this; //a=a,退出
delete st; //不是自身,先释放内存空间
st=new char[strlen(a.st) +1]; //重新申请内存
strcpy(st,a.st); //将对象a的字符串复制到申请的内存区
return *this; //返回this指针的对象
}
str & str::operator=(char *s)
{
delete st; //是字符串直接复制,先释放内存空间
st=new char[strlen(s)+1]; //重新生成内存
strcpy(st, s); //将字符串s复制到内存区st.
return * this;
}
}
下面是测试程序:
Void main(){
Str s1(“We”),s2(“They”), s3(s1); //调用构造函数和复制构造函数
S1.print();s2.print(); s3.print();
S2=s1=s3; //调用赋值操作符
S3=”Gohome”! //调用字符串复制操作符
S3=s3; //调用赋值操作符但不进行赋值操作.
S1.print();s2.print(); s3.print();
}
三,【小结】
到这里,C++的基本语法,基本的理论知识体系就完了,语言基本都是相通的.从结构到类,对象,函数与函数模板再到面向对象继承和派生, 还学习的多态性的虚函数,运算符重载以及流类库,向量等等.
希望我的总结能对能有所帮助, 还希望您能提出宝贵以及, 以便我能改进.