C++内部类和外部类的互相访问(d指针和q指针)
2019-03-01 10:14:55来源:博客园 阅读 ()
搬运自我的CSDN https://blog.csdn.net/u013213111/article/details/87858965
d指针和q指针式Qt中常见的封装方法,由此引出了C++内部类和外部类的互相访问。
其实也是Pimpl(pointer to implementation, 指向实现的指针)方法。
实验代码:
Inner类为Outter类的私有内部类。Inner类中有一个public字符串变量In,Outter类中有一个private字符串变量Out。通过Outter类中的d指针访问Inner类的setIn()和getIn(),实现对In的读写;通过Outter类的d指针访问Inner类,再通过Inner类中的q指针访问Outter类,实现对Out的读写(实际上是多此一举,仅用作说明通过q指针实现内部类对外部类的访问)。由于d指针通过new创建,因此要及时delete并置0;而q指针只是将Outter类的this传入,因此不必delete。
1 #include <iostream> 2 3 using namespace std; 4 5 class Outter { 6 private: 7 string Out; 8 class Inner{ 9 public: 10 string In; 11 Outter *q; 12 Inner(Outter *parent) : q(parent){} 13 void set(string &str){ 14 q->Out = str; 15 } 16 void get(){ 17 cout << q->Out << endl; 18 } 19 }; 20 Inner *d; 21 public: 22 Outter() : d(new Outter::Inner(this)){} //在初始值列表中初始化d指针(首选) 23 //Outter(){d = new Outter::Inner(this);} //在构造函数中给d指针赋值 24 ~Outter(){ 25 delete d; 26 d = 0; 27 } 28 void setIn(string &str){ 29 d->In = str; 30 } 31 void getIn(){ 32 cout << d->In << endl; 33 } 34 void setOut(string &str){ 35 d->set(str); 36 } 37 void getOut(){ 38 d->get(); 39 } 40 void printOut(){ 41 cout << Out << endl; 42 } 43 }; 44 45 int main() 46 { 47 Outter T; 48 string t1 = "In", t2 = "Out"; 49 T.setIn(t1); 50 T.getIn(); 51 T.setOut(t2); 52 T.getOut(); 53 T.printOut(); 54 return 0; 55 }
输出为:
In
Out
Out
参考:
D指针/Q指针在C++中的使用 https://blog.csdn.net/haoxinhaoxin/article/details/79473930
c++内部类怎么访问外部类 https://bbs.csdn.net/topics/310029123
C++ Programming/Idioms https://en.wikibooks.org/wiki/C++_Programming/Idioms
原文链接:https://www.cnblogs.com/H-Lyric/p/10456478.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:10个经典的Java面试题集合
- 通过与C++程序对比,彻底搞清楚JAVA的对象拷贝 2020-06-11
- Java基础复习——类和对象 2020-06-09
- 送你一份年薪百万的抖音Java岗内部面试题 2020-06-09
- Java连载118-编译一个类(包括内部函数、方法、类型、参数) 2020-05-27
- Java内部类及反射类面试问题,90%的人都不知道 2020-05-16
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash