c++类调用的一个小问题
先看这两段代码:


#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++类调用的一个小问题的更多相关文章
- Java类的继承与方法调用的一个小问题
public class Father { protected void server(int i){ switch (i){ case 1: methodone(); break; case 2: ...
- Java对象与类中的一个小练习
一直在Eclipse里做练习.是做一个练习,执行一个的那种.刚刚学习了Java的对象与类,练习中把类和执行放在同一包下的两个.java文件里面了.是可以执行的.(Get) 相关代码: public c ...
- CreateDialog Win32 API调用的一个小问题
在老版本号的VC编译器上.关键调用是下面2句: InitCommonDialogs(); HWND hwndDialog = CreateDialog(hInstance, "IDD_XXX ...
- C++模板类继承的一个小技巧
先说一下background前段时间想实现一个Sqlite localstorage的功能,对应不同的Model 实体有不同的table, 每一次sql操作的函数签名中会有model实体中的struc ...
- Linux localtime_r调用的一个小问题
我们一个项目中有如下代码: time_t loc_time; loc_time = time(NULL); localtime_r(&loc_time,&ptr); 这段代码本意是获取 ...
- java 一个类调用另一个类的方法
在要调用的类B中对调用类A实例化(在B中:A a = new A();a.function();)
- Qt一个project调用还有一个project的类成员变量
一句两句话已经不能表达如今的激动情绪了.唯有感叹知识的博大精深,并把感叹转变为文字. 同一个project调用其它类成员变量很easy. 如: 定义 Test1.h中申明成员变量 class A { ...
- 在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解失效的原因和解决方法
参考原贴地址:https://blog.csdn.net/clementad/article/details/47339519 在同一个类中,一个方法调用另外一个有注解(比如@Async,@Trans ...
- 【转】在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解失效的原因和解决方法
参考 原文链接 @Transactional does not work on method level 描述 在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational) ...
随机推荐
- C#-使用HttpListener创建http服务
参考: c# 通过HttpListener创建HTTP服务 运行服务端程序,启动监听器httpobj.Start();时报错:System.Net.HttpListenerException: 'Ac ...
- [2022-2-26] OICLASS-USACO提高组模拟赛 C·Convoluted Intervals S
这道题非常简单啊,我看很多人都做出来了,张林昨天也讲的很明白了,那我来简单写一下: 暴力思路(10pts) 我们发现,我们只需要模拟画出一个图然后进行暴力枚举就行了. 差分+桶+加乘原理思路(100p ...
- Git 常见错误 之 error:error: src refspec main does not match any/ error: failed to push some refs to 简单解决
错误产生的原因:Github 工程默认名为了 main 由于受到"Black Lives Matter"运动的影响,GitHub 从今年 10 月 1 日起,在该平台上创建的所有新 ...
- Net6 Configuration & Options 源码分析 Part1
Net6 Configuration & Options 源码分析 Part1 在Net6中配置系统一共由两个部分组成Options 模型与配置系统.它们是两个完全独立的系统. 第一部分主要记 ...
- LGP5312题解
压 位 T r i e 入 门 练 习 题(确信) 题意很清楚( 让我们先来想一想,如果没有排序操作的话,这道题应该怎么做. 我们维护一个 \(x\) 表示从开始到现在一共异或上了 \(x\),在序列 ...
- Arch Linux 安装 Anbox
镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 Anbox 介绍 Anbox 是一个可以在 GNU/Linux 发行版上运行 Android App 的容器,是一个开源兼容层. 其工作原理是在 ...
- ARM中断与架构知识 精简知识点
目录 一.ARM系统的异常与中断 二.CPU模式与寄存器 1.ARM CPU模式 2.ARM CPU state,两种指令集 3.ARM CPU寄存器: 引申介绍一下存储空间中的数据存放 4.ARM三 ...
- snort规则
一.Snort规则分为两个部分 二.规则头的基本格式 动作: 动作描述一个数据包的"谁,在何处,什么"的问题,并指明规则被激发后,在事件中应当做什么.在编写规则时,你可以从下面的关 ...
- Redis运维实战之集群中的脑裂
1.对于分布式Redis主从集群来说,什么是脑裂? 所谓的脑裂,就是指在主从集群中,同时有两个主节点,它们都能接收写请求.而脑裂最直接的影响,就是客户端不知道应该往哪个主节点写入数据,结果就是不同的客 ...
- Go语言- import 导入包的语法
一 包的导入语法 在go语言中一个包(文件夹)中可以包含多个 go 文件,每一个文件通过文件第一行的 package 来指明自己所在的包,原则上应该与自己所在的文件夹同名,但也可以指定为其他名称,但同 ...