码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式一(续)

时间:2017-05-07 12:57:14      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:引用   成员变量   char   style   pac   写法   out   blog   对象   

本篇是接着设计模一:观察者模式的续写。

为什么要写这一篇呢:

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 &sub;
};
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相同了。这种写法和之前那篇文章的写法的区别之一就是 本文所用变量皆为局部变量。

之前的文章为什么要用指针呢,因为在传递参数时如果不用指针那么函数内部操作的实际上是局部变量(该程序对局部变量的操作没有意义)

而使用引用完全可以做的和指针相同的功能,区别只是内存分配的问题。

需要注意一点的是 如果类的成员变量是引用类型,那么引用类型只能用初始化表的形式初始化。

设计模式一(续)

标签:引用   成员变量   char   style   pac   写法   out   blog   对象   

原文地址:http://www.cnblogs.com/mryrs/p/6820319.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!