先看这两段代码:

#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++有点陌生了。

c++类调用的一个小问题的更多相关文章

  1. Java类的继承与方法调用的一个小问题

    public class Father { protected void server(int i){ switch (i){ case 1: methodone(); break; case 2: ...

  2. Java对象与类中的一个小练习

    一直在Eclipse里做练习.是做一个练习,执行一个的那种.刚刚学习了Java的对象与类,练习中把类和执行放在同一包下的两个.java文件里面了.是可以执行的.(Get) 相关代码: public c ...

  3. CreateDialog Win32 API调用的一个小问题

    在老版本号的VC编译器上.关键调用是下面2句: InitCommonDialogs(); HWND hwndDialog = CreateDialog(hInstance, "IDD_XXX ...

  4. C++模板类继承的一个小技巧

    先说一下background前段时间想实现一个Sqlite localstorage的功能,对应不同的Model 实体有不同的table, 每一次sql操作的函数签名中会有model实体中的struc ...

  5. Linux localtime_r调用的一个小问题

    我们一个项目中有如下代码: time_t loc_time; loc_time = time(NULL); localtime_r(&loc_time,&ptr); 这段代码本意是获取 ...

  6. java 一个类调用另一个类的方法

    在要调用的类B中对调用类A实例化(在B中:A a = new A();a.function();)

  7. Qt一个project调用还有一个project的类成员变量

    一句两句话已经不能表达如今的激动情绪了.唯有感叹知识的博大精深,并把感叹转变为文字. 同一个project调用其它类成员变量很easy. 如: 定义 Test1.h中申明成员变量 class A { ...

  8. 在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解失效的原因和解决方法

    参考原贴地址:https://blog.csdn.net/clementad/article/details/47339519 在同一个类中,一个方法调用另外一个有注解(比如@Async,@Trans ...

  9. 【转】在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解失效的原因和解决方法

    参考 原文链接 @Transactional does not work on method level 描述 在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational) ...

随机推荐

  1. python如何data格式和时间戳的转换

    Python 获取几天前的时间 计算几天前并转换为指定格式. import time import datetime # 先获得时间数组格式的日期 threeDayAgo = (datetime.da ...

  2. LeetCode-015-三数之和

    三数之和 题目描述:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组. 注意:答案 ...

  3. 使用Three.js实现神奇的3D文字悬浮效果

    声明:本文涉及图文和模型素材仅用于个人学习.研究和欣赏,请勿二次修改.非法传播.转载.出版.商用.及进行其他获利行为. 背景 在 Three.js Journey 课程示例中,提供了一个使用 Thre ...

  4. Actor model 的理解与 protoactor-go 的分析

    Overview Definition From wikipedia The actor model in computer science is a mathematical model of co ...

  5. 巧用 CSS 构建渐变彩色二维码

    今日,群里有个很有意思的问题,问我如何实现一个彩色的,带渐变的二维码,像是这样: 很有意思的问题,我们在百度谷歌,搜索 qrcode,能搜到非常多在线制作二维码的工具,它们其中一些也会带有制作渐变二维 ...

  6. thinkphp 框架自带搜索+分页+搜索标红

    ..........控制器方法 public function index() { //接受搜索关键字 $word=input('word'); $where=[]; if (!empty($word ...

  7. CentOS Linux服务器 挂载硬盘

    1.通过fdisk -l 查看目前的硬盘信息,默认是从sda开始排,增加第二块硬盘的时候,会显示sdb,以此类推,我的是vda,vdb,以自己实际的为主,下面以sda,sdb 讲解 2.添加硬盘3.重 ...

  8. Vue2.0双向数据绑定原理

    Object.defineProperty(objectName, key, option); Object.defineProperty()可以直接在一个对象上定义一个新属性, 或者修改一个属性, ...

  9. Export大数据量导出和打包

    项目需求 ​ 导出生成大批量数据的文件,一个Excel中最多存有五十万条数据,查询多余五十万的数据写多个Excel中.导出完成是生成的多个Excel文件打包压缩成zip,而后更新导出记录中的压缩文件路 ...

  10. 数据库篇:mysql日志类型之 redo、undo、binlog

    前言 可以说mysql的多数特性都是围绕日志文件实现,而其中最重要的有以下三种 redo 日志 undo 日志 binlog 日志 关注公众号,一起交流:微信搜一搜: 潜行前行 1 redo日志 in ...