首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++类上下文中的引用和指针

C++类上下文中的引用和指针
EN

Stack Overflow用户
提问于 2020-08-09 16:02:44
回答 1查看 83关注 0票数 1

我想问一个关于C++中的引用和指针的问题。

我是一个初学者在C++,所以我道歉,如果答案是微不足道的。

作为教程的一部分,我编写了以下代码。

代码语言:javascript
复制
#include <iostream>

using namespace std;

class Deep {
private: 
    int *data;
public:
    void set_data_value(int d) {*data = d;}
    int get_data_value () {return *data;}
    // Constructor
    Deep (int d);
    // Copy constructor
    Deep (const Deep &source);
    // Destructor
    ~Deep();
};

Deep::Deep(int d) {
    data = new int;
    *data = d;
}

Deep::Deep (const Deep &source)
    : Deep (*source.data){ // main body of the constructor (delegation comes before the body)
        cout << "Copy Constructor - deep copy" << endl;
    }

Deep::~Deep() {
    delete data;
    cout << "Destructor deleting data" << endl;
}

void display_deep (Deep s) {
    cout << s.get_data_value() << endl;
}

int main () {
    Deep obj1 {100};
    display_deep (obj1);

    Deep obj2{obj1};

    obj2.set_data_value(1000);

    cout << endl;
    return 0;
}

这个密码起作用了。我将解释我所做的事:

我定义了一个名为Deep的类来练习一个深拷贝。名为data的指针是私有的,我已经包括(稍后定义)函数原型set_data_valueget_data_value

set_data_value接受一个整数d,取消data并将值d赋值给它。get_data_value只返回取消引用的data值。

public域中还有一个构造函数,它接受一个整数d,一个复制构造函数,它使对象保持不变,并在析构函数旁边接受引用&source

在复制构造函数中,我使用委托构造函数来改进代码流。

但是,如果我们观察到复制构造函数

代码语言:javascript
复制
Deep::Deep (const Deep &source)
    : Deep (*source.data){ // main body of the constructor (delegation comes before the body)
        cout << "Copy Constructor - deep copy" << endl;
    }

我们知道这是在void display_deep (Deep s)的逐值特性上运行的,因此source是对传入的s的引用。然后我们指向source并以某种方式获得数据的值,然后将其传递给构造函数。

这是怎么回事?*source.data是否像我所描述的那样工作,或者编译器是否采用了不同的方法?

EN

回答 1

Stack Overflow用户

发布于 2020-08-09 16:25:16

然后我们指向源和

没有指向任何东西。在这一行:

代码语言:javascript
复制
: Deep (*source.data)

您只是在访问data中的source。那你就是在取消它。就像取消引用*data来获取其中的值一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63328506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档