C++学习笔记(2)

来源:互联网 发布:玻璃杯 知乎 编辑:程序博客网 时间:2024/05/16 01:18

原著:www.geocities.jp/ky_webid/cpp


第13章 包含和连锁

// sample.h#include <iostream>// スーパークラスclass CSuper{public:CSuper();virtual ~CSuper();void Func();};// 包含されるクラスclass CInner{public:CInner();virtual ~CInner();void Func();};// サブクラスclass CSub : public CSuper{public:CSub();virtual ~CSub();void Func();private:CInner m_inner;  // クラスを包含する};// sample.cpp#include "sample.h"// スーパークラスのコンストラクタCSuper::CSuper(){std::cout << "CSuper::CSuper()" << std::endl;}// スーパークラスのデストラクタCSuper::~CSuper(){std::cout << "CSuper::~CSuper()" << std::endl;}// スーパークラスのメンバ関数void CSuper::Func(){std::cout << "CSuper::Func()" << std::endl;}// 包含されるクラスのコンストラクタCInner::CInner(){std::cout << "CInner::CInner()" << std::endl;}// 包含されるクラスのデストラクタCInner::~CInner(){std::cout << "CInner::~CInner()" << std::endl;}// 包含されるクラスのメンバ関数void CInner::Func(){std::cout << "CInner::Func()" << std::endl;}// サブクラスのコンストラクタCSub::CSub(){std::cout << "CSub::CSub()" << std::endl;}// サブクラスのデストラクタCSub::~CSub(){std::cout << "CSub::~CSub()" << std::endl;}// サブクラスのメンバ関数void CSub::Func(){std::cout << "CSub::Func()" << std::endl;CSuper::Func();  // スーパークラスのメンバ関数を呼び出すm_inner.Func();  // 包含しているクラスのメンバ関数を呼び出す}// main.cpp#include "sample.h"int main(){CSub obj;obj.Func();return 0;}

执行的顺序为:

CSuper::CSuper()

CInner::CInner()

CSub::CSub()

CSub::Func()

CSuper::Func()

CInner::Func()

CSub::~CSub()

CInner::~CInner()

CSuper::~CSuper()


第14章 Protect

super.m_public = 100;super.m_protected = 100;  // 不可!super.m_private = 100;    // 不可!

可以通过父类public的函数访问


第15章 Reference

include <iostream>class CSample{public:CSample(){ m_num = 123; } // コンストラクタCSample(const CSample& obj);  // 引用构造函数int& get(){ return m_num; } // 返回的是类成员的引用值private:int m_num;};void main(){    CSample beta();    CSample sample = beta;   //引用复制构造函数    int& val =sample.get();     //接受类型为引用    val *=2;    cout<<sample.get()<<endl;}
使用场景:1.函数参数  2.构造函数初始化  3.返回值


第16章 指向函数的指针

int max(int,int);int main() {int (*p)(int,int);int a,b,c;p = max;scanf("%d,%d",&a,&b);c = (*p)(a,b);}//作为参数int StackTraverse(int S,int (*visit)(int,int));

第17章 运算符重载

 // +演算子オーバーロードCPoint CPoint::operator+(const CPoint& obj) {CPoint tmp;tmp.m_x = m_x + obj.m_x;tmp.m_y = m_y + obj.m_y;return tmp;}// +=演算子オーバーロードCPoint& CPoint::operator+=(const CPoint& obj){m_x += obj.m_x;m_y += obj.m_y;return *this;}

 class CData{public:CData& operator++(); // 前置CData operator++(int); // 后置(引数の int は后置式であることを示すダミー)private:int m_data;};CData& CData::operator++(){// 前置式なので、インクリメントを行ってから returnm_data += 1;return *this;}CData CData::operator++(int){// 后置式なので、古い状态をローカル変数にコピーしておき、インクリメントする。 // その后で、古い方を返す。CData tmp = *this;m_data += 1;return tmp;}

禁制copy技术

private:CTest(const CTest&); // コピーコンストラクタCTest operator=(const CTest&); // 代入演算子オーバーロード


0 0
原创粉丝点击