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
- C 学习笔记2
- c学习笔记(2)
- c sharp学习笔记2
- C语言学习笔记(2)
- 狂人C学习笔记(2)
- C: 入门学习笔记(2)
- object-c学习笔记-2
- C语言学习笔记2
- c语言学习笔记2
- C++Primer学习笔记《2》
- C语言学习笔记2
- C语言学习笔记2
- Objective-C学习笔记2
- Linux &C 学习笔记2
- C语言学习笔记2
- C&C++学习笔记2
- c语言学习笔记2
- C/C++学习笔记2
- Myeclipse8.6安装Maven插件------
- Axure创建Tab页
- UVa:424 - Integer Inquiry
- orcale 中常用函数
- 日期格式
- C++学习笔记(2)
- ubuntu sublime安装及配置
- 面试求职中需要了解的Java多线程知识
- python抓取豌豆荚app数据信息
- Laravel cheatsheet
- 阿里实习二面
- 建造者模式
- jQuery中ajax异步请求应用
- MonkeyRunner常用类方法