先看这两段代码:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Subject
{
public:
Subject(){}
virtual ~Subject(){}
virtual void attach(MyObserver *observer)=0;
virtual void detach(MyObserver *observer)=0;
virtual void stockUp()=0;
virtual void stockDown()=0;
};
class Stock:public Subject
{
public:
void attach(MyObserver *observer)
{
observers.push_back(observer);
}
void detach(MyObserver *observer)
{
vector<MyObserver*>::iterator observer_rm = find(observers.begin(), observers.end(), observer);
observers.erase(observer_rm);
}
void stockUp()
{
cout<<"股票上涨5%"<<endl;
vector <MyObserver *>::iterator iObserver = observers.begin();
while(iObserver != observers.end())
{
(*iObserver)->response1();
iObserver++;
}
}
void stockDown()
{
vector <MyObserver *>::iterator iObserver = observers.begin();
cout<<"股票下降5%"<<endl;
while(iObserver != observers.end())
{
(*iObserver)->response2();
iObserver++;
}
}
private:
vector<MyObserver*> observers;
};
class MyObserver
{
public:
virtual void response1() = 0;
virtual void response2() = 0;
}; class Investor:public MyObserver
{
public:
void response1(){
cout<<"股民买股票"<<endl;
}
void response2(){
cout<<"股民大哭一场"<<endl;
}
};
int main()
{
Stock subject;
Investor obs;
subject.attach(&obs);
subject.stockUp();
subject.stockDown();
}

c++代码片段一

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class MyObserver
{
public:
virtual void response1() = 0;
virtual void response2() = 0;
}; class Investor:public MyObserver
{
public:
void response1(){
cout<<"股民买股票"<<endl;
}
void response2(){
cout<<"股民大哭一场"<<endl;
}
};
class Subject
{
public:
Subject(){}
virtual ~Subject(){}
virtual void attach(MyObserver *observer)=0;
virtual void detach(MyObserver *observer)=0;
virtual void stockUp()=0;
virtual void stockDown()=0;
};
class Stock:public Subject
{
public:
void attach(MyObserver *observer)
{
observers.push_back(observer);
}
void detach(MyObserver *observer)
{
vector<MyObserver*>::iterator observer_rm = find(observers.begin(), observers.end(), observer);
observers.erase(observer_rm);
}
void stockUp()
{
cout<<"股票上涨5%"<<endl;
vector <MyObserver *>::iterator iObserver = observers.begin();
while(iObserver != observers.end())
{
(*iObserver)->response1();
iObserver++;
}
}
void stockDown()
{
vector <MyObserver *>::iterator iObserver = observers.begin();
cout<<"股票下降5%"<<endl;
while(iObserver != observers.end())
{
(*iObserver)->response2();
iObserver++;
}
}
private:
vector<MyObserver*> observers;
};
int main()
{
Stock subject;
Investor obs;
subject.attach(&obs);
subject.stockUp();
subject.stockDown();
}

c++代码片段二

运行后:片段一运行错误,片段二运行成功

后来发现,在Subject中调用MyObserver时,类MyObserver应放在Subject之前,才能调用成功,也就是说在c++中如果想要调用某个类,应放在前面,或者如果不想管顺序,那就需要提前进行类的声明。

用java用习惯了,用c++有点陌生了。

最新文章

  1. openstack云5天资料
  2. php类的__get和__set方法
  3. @RequestMapping用法详解
  4. 【转】mysql触发器的实战(触发器执行失败,sql会回滚吗)
  5. 如何清除朗逸保养提示标志INSP
  6. C# 无边框窗体之窗体移动
  7. Hibernate常用配置文件详解
  8. Selenium2Library系列 keywords 之 _SelectElementKeywords 之 select_from_list(self, locator, *items)
  9. Android Shape画圆,矩形
  10. IntelliJ IDEA 14 注册码生成java代码(转)
  11. wap网页、微信内嵌网页在手机端页面窗口尺寸如何不缩放
  12. IBM RAD 快捷键
  13. 关于wordpress升级遇到的问题
  14. Mac vs code 快捷键
  15. win10的linux子系统安装及使用
  16. SpringBoot小新手。
  17. 搭建Vue.js环境,建立一个简单的Vue项目
  18. 【转】每天一个linux命令(10):cat 命令
  19. 函数parseQuery用于解析url查询参数
  20. asp.net core + 前端H5 页面视频站制作尝试

热门文章

  1. 一台电脑设置多个网段的IP地址
  2. 【一周聚焦】 联邦学习 arxiv 2.16-3.10
  3. 微信小程序结合 tp实现秒杀
  4. springsecurity-01-0511
  5. huawei 华为 ubuntu mysql 访问不了的原因
  6. k8s 开船记-脚踏两只船:船儿还是旧的好,不翻船才是硬道理
  7. Ubuntu下使用C语言连接Mysql 8.0客户端教程
  8. [转载]nc命令详解
  9. Redis系统学习
  10. Python通过snap7库与西门子S7-1200建立S7通信,读写存储器数据,顺便写个流水灯