面向对象程序设计-C++ Default constructor & Copy constructor& Destructor & Operator Overloading【第九次上课笔记】
先上笔记内容吧:
这次上课的内容有关
- 构造函数
- 析构函数
- 运算符重载
- return * this
内容很细,大家好好回顾笔记再照应程序复习吧 :)
#include <iostream> using namespace std; class Integer {
public:
int i;
int geti () const {return this->i;}
void seti (int i) {this->i = i;}
Integer(int j = );
Integer(Integer & c);
~Integer();
}; Integer::Integer (Integer & c) { //Constructer Function
i = ;
cout << "Integer (Integer & c)" << endl;
} Integer::Integer (int j) : i(j) { //Copy Constructer Function
cout << "Integer (int j)" << endl;
} Integer::~Integer () { //Destructer Function
cout << "~Integer () " << endl;
} const Integer & fun (const Integer & in) {
cout << in.geti () << endl;
return in;
} int main (){ Integer b();
fun(b).geti();
Integer a(b); return ;
}
下面这个程序是有关运算符重载
通过 log print 可以跟踪观察到析构的顺序
同时还有引用返回、友元函数的例子
#include <iostream> using namespace std; class Integer {
private:
int i;
public:
int geti () const {return this->i;}
void seti (int i) {this->i = i;}
Integer(int j = );
Integer(Integer & c);
~Integer(); const Integer & operator = (const Integer & in);
friend const Integer operator + (const Integer & lhs, const Integer & rhs);
}; const Integer & Integer::operator = (const Integer & in) { //Member Function
i = in.i + ;
//return in;
return *this;
} const Integer operator + (const Integer & lhs, const Integer & rhs) { //全局函数
Integer out;
out.i = lhs.i + rhs.i;
return out;
} Integer::Integer (Integer & c) { //Constructer Function
i = ;
cout << "Integer (Integer & c)" << endl;
} Integer::Integer (int j) : i(j) { //Copy Constructer Function
cout << "Integer (int j)" << ' ' << j << endl;
} Integer::~Integer () { //Destructer Function
cout << "~Integer () " << ' ' << i << endl;
} int main (){ Integer b(), a, c, d;
cout << "a.geti()" << a.geti() << endl;
d = c = a = b;
cout << "a.geti()" << a.geti() << endl;
cout << "c.geti()" << c.geti() << endl;
cout << "d.geti()" << d.geti() << endl; d = a + b;
cout << "d.geti()" << d.geti() << endl; return ;
}
接下来运算符重载作一些附加说明
- =
- &
- ,
这三个运算符可以直接使用
运算符重载的时候,如果既有 成员函数,又有全局函数, 优先(?)
eg.
++i (前加) Integer & operator ++ ()
i++ (后加) Integer & operator ++ (int)
括号中的 int 仅仅表示后加,无其他含义
下面的这个例子可以帮助大家更好的理解
#include <iostream> using namespace std; class Integer {
private:
int i;
public:
int geti () const {return this->i;}
void seti (int i) {this->i = i;}
Integer(int j = 0);
Integer(Integer & c);
~Integer(); Integer & operator ++ ();
Integer operator ++ (int);
const Integer & operator = (const Integer & in);
friend const Integer operator + (const Integer & lhs, const Integer & rhs);
}; Integer & Integer::operator ++ () {
++i;
return *this;
} Integer Integer::operator ++ (int) {
Integer temp (this->i);
++temp.i;
return temp;
} const Integer & Integer::operator = (const Integer & in) { //Member Function
i = in.i;
//return in;
return *this;
} const Integer operator + (const Integer & lhs, const Integer & rhs) { //全局函数
Integer out;
out.i = lhs.i + rhs.i;
return out;
} Integer::Integer (Integer & c) { //Constructer Function
i = 18;
cout << "Integer (Integer & c)" << endl;
} Integer::Integer (int j) : i(j) { //Copy Constructer Function
cout << "Integer (int j)" << ' ' << j << endl;
} Integer::~Integer () { //Destructer Function
cout << "~Integer () " << ' ' << i << endl;
} int main (){ Integer b(8), a;
cout << b.geti () << "," << a.geti () << endl;
a = ++b;
cout << b.geti () << "," << a.geti () << endl;
a = b++;
cout << b.geti () << "," << a.geti () << endl; return 0;
}
面向对象程序设计-C++ Default constructor & Copy constructor& Destructor & Operator Overloading【第九次上课笔记】的更多相关文章
- 面向对象程序设计-C++ Finial exam review NOTES【第十六次上课笔记】
写在前面: 我记得也不全,如果有记录的更全的同学可以留言,我会添加哒 :) 常量 内敛函数 为什么需要内敛函数 内敛函数适用于什么场合 内敛函数本身,最大优点是,避免了真正函数调用的开销 因为普通函数 ...
- default constructor,copy constructor,copy assignment
C++ Code 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...
- c++ constructor, copy constructor, operator =
// list::push_back #include <iostream> #include <list> class element{ private: int numbe ...
- C++ explicit constructor/copy constructor note
C++:explict 作用显示声明构造函数只能被显示调用从而阻止编译器的隐式转换,类似只能用()显示调用,而不能=或者隐式调用 #include <iostream> #include ...
- 面向对象程序设计-C++ Class & Object & Friend Function & Constructor & Destructor【第五次上课笔记】
大家可以下载后用Vim 或者 Sublime Text等文本编辑器查看 以下代码均已折叠,点击“+“即可打开 一开始老师用C语言大作业的例子,写了个 Student 的结构以及相关操作 #includ ...
- C++-copy constructor、copy-assignment operator、destructor
本文由@呆代待殆原创,转载请注明出处. 对于一个类来说,我们把copy constructor.copy-assignment operator.move constructor.move-assig ...
- C++ 类 复制构造函数 The Copy Constructor
一.复制构造函数的定义 复制构造函数是一种特殊的构造函数,具有一般构造函数的所有特性.复制构造函数创建一个新的对象,作为另一个对象的拷贝.复制构造函数只含有一个形参,而且其形参为本类对象的引用.复制构 ...
- 构造函数语义学之Copy Constructor构建操作(2)
二.详述条件 3 和 4 那么好,我又要问大家了,条件1 和 2比较容易理解.因为member object或 base class 含有copy constructor.那么member objec ...
- 构造函数语义学之Copy Constructor构建操作(1)
一.Copy Constructor的构建操作 就像 default constructor 一样,如果class没有申明一个 copy constructor,就会隐含的声明或隐含的定义一个.生成的 ...
随机推荐
- 解决python2.7.9以下版本requests访问https的问题
在python2.7.9以下版本requests访问https连接后,总会报一些关于SSL warning. 解决法子可以参考:https://urllib3.readthedocs.io/en/la ...
- 在 Windows Media Center 中观看电视
如果计算机具备了必要的硬件,则可以在电脑上使用 Windows Media Center 观看.暂停和快退直播的电视节目及录制的电视节目. 通过 Windows Media Center 观看直播电视 ...
- Delphi的MDI编程中遇到的一个奇怪问题(值得研究的一个问题)
近日在用delphi写一个多文档应用程序,除了一个主界面是自动生成的,其他功能页面全部都是通过Application.CreateForm()动态生成的,也就是说在ProjectManager中点击程 ...
- 关于 OnCloseQuery: 顺序、不能关机等(所有的windows的广播消息都是逐窗口传递的)——如果一个窗体的OnCloseQuery事件中如果写了代码那么WM_QUERYENDSESSION消息就传不过去了msg.result会返回0,关机事件也就停止了
系统关闭窗体的事件顺序为: OnCloseQuery ----> OnClose ----> OnDestroy 下面的代码说明问题: unit Unit3; interface uses ...
- Java面试题收集学习整理1
1.java序列化.反序列化及serialVersionUID作用 ."=="和equals方法究竟有什么区别? .静态变量和实例变量的区别? 在语法定义上的区别:.Integer ...
- HDOJ 1226 超级密码(bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1226 思路分析:题目要求寻找一串长度不大于500的C进制的密码,且该密码需要为十进制数N的整数倍. & ...
- 使用Linux静态库
查看静态库.a文件包含的内容用下面的命令解压: ar x libgdal.a 然后就可以查看文件了: ls adler32.o cpl_recode.o dted_create.o gdalpamra ...
- Android的电源管理框架
Android的电源管理框架 Android通过锁和定时器来切换系统的状态,使系统的功耗降至最低,整个系统的电源管理框架分成五个部分:应用层,framework层,JNI层,HAL层和内核层.电源管理 ...
- [055] SSL 3.0曝出Poodle漏洞的解决方式-----开发人员篇
SSL 3.0曝出高危漏洞 2014年10月15日,Google研究人员发布SSL 3.0协议存在一个非常严重的漏洞,该漏洞可被黑客用于截取浏览器与server之间进行传输的加密数据,如网银账号.邮箱 ...
- hdu 4180
题意; 求接近规定 分数 的 最大分数用到 farey 数列的第二条性质 1 #include <iostream> #include<stdio.h> using names ...