C++交差调用、C++互相引用
其实变通一下,也可以实现功能,但是我这个人就是这么犟,哈哈。
这个项目是一个机器人自动购买耐克鞋系统(也可以说是一个自动抢鞋系统),需要把某网站的一个JS文件内容用C++改写过来。改写需要尽量的保持原貌,并且适应的添加周边方法,所以我才这么犟。
改写建了两个类(其它类就不说了),Document 类和 Window 类,没有继承关系,但是要把 Document 实例装载到 Window 实例中,而且 Document 实例还有某一方法需要通过 Window 指针来访问其某些属性,这就交差了。
通过在网上查找,了解了一些理论,又通过编译报错,一点点修改,最终实现了C++交差调用、C++互相引用,特此记录:
Document.h
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#ifndef NIKE_DOCUMENT_H #define NIKE_DOCUMENT_H class Window; // 这里是重点(一) #incluce <iostream> #include <cstring> class Document { Window *m_window; public: Document(); int documentMode(); }; #endif //NIKE_DOCUMENT_H |
Document.cpp
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include "Document.h" #include "Window.h" // 这里是重点(二) Document::Document() { // ...... } int Document::documentMode() { std::string s = this->m_window->run(); std::transform(s.begin(), s.end(), s.begin(), ::tolower); // 全部转为小写 std::string::size_type idx = s.find("msie"); // MSIE return idx != std::string::npos ? 11 : 0; } |
Window.h
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#ifndef NIKE_WINDOW_H #define NIKE_WINDOW_H class Document; // 这里是重点(三) #include <iostream> #include <cstring> class Window { Document m_document; std::string userAgent; public: Window(); std::string run(); }; #endif //NIKE_WINDOW_H |
Window.cpp
0 1 2 3 4 5 6 7 |
#include "Window.h" Window::Window() { }; std::string Window::run() { return userAgent; } |
编译(t_Window.cpp是测试入口文件):
0 |
g++ t_Window.cpp ../src/*.cpp -o t_Window.exe |
大致就是这么个意思吧,就不按原项目的方法去写了。
最初我在《重点二》处没有做引用,造成编译失败。