本文主要是介绍C++内部类和外部类的互相访问(d指针和q指针),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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。
#include <iostream>using namespace std;class Outter {
private: string Out;class Inner{public:string In;Outter *q;Inner(Outter *parent) : q(parent){}void set(string &str){q->Out = str;}void get(){cout << q->Out << endl;}};Inner *d;
public:Outter() : d(new Outter::Inner(this)){} //在初始值列表中初始化d指针(首选)//Outter(){d = new Outter::Inner(this);} //在构造函数中给d指针赋值~Outter(){delete d;d = 0;}void setIn(string &str){d->In = str;}void getIn(){cout << d->In << endl;}void setOut(string &str){d->set(str);}void getOut(){d->get();}void printOut(){cout << Out << endl;}
};int main()
{Outter T;string t1 = "In", t2 = "Out";T.setIn(t1);T.getIn();T.setOut(t2);T.getOut();T.printOut();return 0;
}
输出为:
In
Out
Out
参考:
D指针/Q指针在C++中的使用
c++内部类怎么访问外部类
C++ Programming/Idioms
这篇关于C++内部类和外部类的互相访问(d指针和q指针)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!