C++内部类和外部类的互相访问(d指针和q指针)

32 篇文章 0 订阅

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值