首页 > 代码库 > 设计模式一(续)
设计模式一(续)
本篇是接着设计模一:观察者模式的续写。
为什么要写这一篇呢:
java在main函数里new出的对象都是局部变量,而用C++ 在main函数里new出来的都是 动态分配到堆区的。
那么可不可以按照java的思路来写呢。
这就是写本篇的原因了:C++完全可以按照java的思路来实现(使用引用)
附上代码:
#include "stdafx.h" #include<iostream> #include<string> #include<vector> using namespace std; class Observer; class Subject; class Subject { public: Subject() { msg="orinal msg"; } void add(Observer &ob) { vec.push_back(ob); } void show() { cout<<"broadcast:msg is:"<<msg<<endl; } void change(string msg) { this->msg=msg; notification(); } void notification(); private: vector<Observer> vec; string msg; }; class Observer { public: Observer(Subject &sub):sub(sub) { this->sub.add(*this); //这里使用了*this this指的是指向对象本身的指针,*this 指的是对象本身。 } void Showdate() { sub.show(); } private: Subject ⊂ }; void Subject::notification() { vector<Observer>::iterator v = vec.begin(); while( v != vec.end()) { (*v).Showdate(); v++; } } int _tmain(int argc, _TCHAR* argv[]) { Subject sub= Subject(); Observer ob1= Observer(sub); Observer ob2= Observer(sub); sub.change("asdasd"); return 0; }
这里使用了引用类型,引用类型 的格式 TYPE &A =XXX,之所以称为引用 指的就是该引用变量和变量本身是同一块内存单元。
这样就与JAVA相同了。这种写法和之前那篇文章的写法的区别之一就是 本文所用变量皆为局部变量。
之前的文章为什么要用指针呢,因为在传递参数时如果不用指针那么函数内部操作的实际上是局部变量(该程序对局部变量的操作没有意义)
而使用引用完全可以做的和指针相同的功能,区别只是内存分配的问题。
需要注意一点的是 如果类的成员变量是引用类型,那么引用类型只能用初始化表的形式初始化。
设计模式一(续)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。