面向对象程序设计-C++ Default constructor & Copy constructor& Destructor & Operator Overloading【第九次上课笔记】
2015-04-28 21:33
621 查看
先上笔记内容吧:
这次上课的内容有关
构造函数
析构函数
运算符重载
return * this
内容很细,大家好好回顾笔记再照应程序复习吧 :)
下面这个程序是有关运算符重载
通过 log print 可以跟踪观察到析构的顺序
同时还有引用返回、友元函数的例子
接下来运算符重载作一些附加说明
=
&
,
这三个运算符可以直接使用
运算符重载的时候,如果既有 成员函数,又有全局函数, 优先(?)
eg.
++i (前加) Integer & operator ++ ()
i++ (后加) Integer & operator ++ (int)
括号中的 int 仅仅表示后加,无其他含义
下面的这个例子可以帮助大家更好的理解
这次上课的内容有关
构造函数
析构函数
运算符重载
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 = 0); Integer(Integer & c); ~Integer(); }; 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)" << endl; } Integer::~Integer () { //Destructer Function cout << "~Integer () " << endl; } const Integer & fun (const Integer & in) { cout << in.geti () << endl; return in; } int main (){ Integer b(8); fun(b).geti(); Integer a(b); return 0; }
下面这个程序是有关运算符重载
通过 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 = 0); 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 + 50; //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, 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 0; }
接下来运算符重载作一些附加说明
=
&
,
这三个运算符可以直接使用
运算符重载的时候,如果既有 成员函数,又有全局函数, 优先(?)
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++ Class & Object & Friend Function & Constructor & Destructor【第五次上课笔记】
- 面向对象程序设计-C++ Inheritance & Multiple inheritance & RTTI【第十三次上课笔记】
- 面向对象程序设计-C++ Stream & Template & Exception【第十五次上课笔记】
- 面向对象程序设计-C++ Type conversion (Static) & Inheritance & Composition【第十二次上课笔记】
- 面向对象程序设计-C++ Steam & Vector 【第三次上课笔记】
- 面向对象程序设计-C++ Operator Overloading & Type conversion (Static)【第十一次上课笔记】
- 面向对象程序设计-C++ Finial exam review NOTES【第十六次上课笔记】
- {key}面向对象程序设计-C++ polymorphism 【第十三次上课笔记】
- 面向对象与C++程序设计-类的继承与派生学习笔记
- 设计模式C++学习笔记之二十(完结篇 & 面向对象原则)设计模式C++实例下载
- 面向对象与C++程序设计-向量和迭代器学习笔记
- C++ 学习笔记(15)面向对象程序设计(类、继承、虚函数、抽象类、using命令、容器与继承)
- 深入探索C++对象模型笔记之三 —— 构造函数语意学 (Default Constructor的建构操作)
- C++学习笔记【第三部分第十五章:面向对象程序设计】
- 笔记:C++学习之旅---面向对象程序设计2
- C++学习笔记 面向对象程序设计
- C++面向对象笔记:多态
- PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
- Java基础笔记整理---【09】面向对象程序设计-上转型对象
- c++面向对象的程序设计4*4的魔方程序