(复制构造函数)作为参数传递来初始化另一个对象的对象如何访问私有成员?

aste123

示例代码:

class my
{
    int x;
    public:
    my(int a)
    {
        x = a;
    }
    my(my &obj)
    {
        x = obj.x;
    }
.
.
}

int main(void)
{
    my object1(5);
    my object2(object1);
    return 0;
}

如何通过传递object1来初始化object2?据我所知,object1无法x直接访问该成员,那么它对初始化object2有何帮助?

Angew不再为SO感到骄傲

访问控制(公共/私有/受保护)控制一段代码是否可以合法地引用类成员的名称。单个对象在这里不起作用;整个问题仅与代码和名称有关。

让我们比较一下您的问题的构造函数,一个朋友函数和一个自由函数:

class my
{
  int x;

  friend void fr(my&);
public:
  my(my &obj)
  {
    x = obj.x;
  }
};

void fr(my &obj)
{
  obj.x += 1;
}

void nonfr(my &obj)
{
  obj.x += 2;
}

接受声明x = obj.x;语句是一段代码。那段代码在哪里?在类的构造函数内部my因此,它是类的一部分,因此可以访问名称obj.x

接下来,声明obj.x += 1;那段代码在哪里?在函数内部fr,这是类的朋友my是朋友,因此可以访问名称obj.x

最后,声明obj.x += 2;那段代码在哪里?里面的功能nonfrnonfr是与class无关的普通函数my,因此它无权访问class的私有(或受保护)成员的名称my,因此将无法编译。


旁注:

通常,复制构造函数应通过引用const来获取其参数,如下所示:

my(const my &obj)

通过非const引用获取的复制构造函数可以修改源对象,并且它们的可行用例非常少见。更不用说它们阻止了从临时对象的复制,因为那些临时对象无法绑定到非const引用。

同样,通常最好在构造函数内部使用mem-initialiser-list而不是赋值,因为后者首先初始化成员,然后再对其赋值。因此,总的来说,构造函数应如下所示:

my(const my &obj) : x(obj.x)
{}

更不用说一个事实,除非您需要在复制构造函数中进行特殊处理(您不在此处),否则根本不应该声明它,而让编译器为您生成它。有关更多信息,请参见零规则和三规则

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在另一个类构造函数中初始化一个类对象

来自分类Dev

在另一个类对象中初始化一个对象(在对该构造函数执行一些操作之后)。

来自分类Dev

如何访问对象的私有成员?

来自分类Dev

Java-试图使用在另一个类中传递给另一个构造函数的参数来初始化对象?

来自分类Dev

(复制构造函数)作为参数传递来初始化另一个对象的对象如何访问私有成员?

来自分类Dev

我们可以在另一个类的构造函数的帮助下初始化对象吗?

来自分类Dev

类方法如何访问相同类的另一个实例的私有成员?

来自分类Dev

将Ruby对象的实例变量作为映射传递给另一个类的初始化程序

来自分类Dev

另一个类中的参数化对象初始化

来自分类Dev

如何从子类的构造函数初始化父类的私有成员

来自分类Dev

使用另一个构造函数的初始化来初始化构造函数中的属性

来自分类Dev

如果一个类包含另一个类的对象,并且所有类都通过构造函数初始化,那么初始化如何工作?

来自分类Dev

如果有对象被创建为另一个类的数据成员,如何将值传递给参数化的构造函数?

来自分类Dev

从另一个constexpr std :: array初始化没有默认构造函数的对象的std :: array

来自分类Dev

Kotlin使用另一个对象作为默认构造函数参数创建新对象

来自分类Dev

在另一个类对象中初始化一个对象(在对该构造函数执行一些操作之后)。

来自分类Dev

用参数初始化另一个类构造函数中的对象

来自分类Dev

初始化变量后在另一个类中构造对象

来自分类Dev

我们可以在另一个类的构造函数的帮助下初始化对象吗?

来自分类Dev

无法初始化向量来保存使用其构造函数初始化的另一个类

来自分类Dev

我如何获得一个类成员函数以访问另一个类成员函数的私有成员?

来自分类Dev

C ++-如何在另一个类中使用私有构造函数实例化对象

来自分类Dev

如何使用一个类的构造函数作为Java中另一个类的对象的参数?

来自分类Dev

另一个类的c ++私有对象:初始化并使用它调用该类中的函数

来自分类Dev

另一个类中的参数化对象初始化

来自分类Dev

如何将对象的动态数组传递给另一个类的参数化构造函数?

来自分类Dev

如何在构造函数中将对象数组作为参数传递,然后将传递的数组复制到另一个数组(仍在构造函数中)

来自分类Dev

如何初始化一个类并将对象传递给Android中的构造函数?

来自分类Dev

如何初始化作为另一个类的成员变量的基类对象?

Related 相关文章

  1. 1

    在另一个类构造函数中初始化一个类对象

  2. 2

    在另一个类对象中初始化一个对象(在对该构造函数执行一些操作之后)。

  3. 3

    如何访问对象的私有成员?

  4. 4

    Java-试图使用在另一个类中传递给另一个构造函数的参数来初始化对象?

  5. 5

    (复制构造函数)作为参数传递来初始化另一个对象的对象如何访问私有成员?

  6. 6

    我们可以在另一个类的构造函数的帮助下初始化对象吗?

  7. 7

    类方法如何访问相同类的另一个实例的私有成员?

  8. 8

    将Ruby对象的实例变量作为映射传递给另一个类的初始化程序

  9. 9

    另一个类中的参数化对象初始化

  10. 10

    如何从子类的构造函数初始化父类的私有成员

  11. 11

    使用另一个构造函数的初始化来初始化构造函数中的属性

  12. 12

    如果一个类包含另一个类的对象,并且所有类都通过构造函数初始化,那么初始化如何工作?

  13. 13

    如果有对象被创建为另一个类的数据成员,如何将值传递给参数化的构造函数?

  14. 14

    从另一个constexpr std :: array初始化没有默认构造函数的对象的std :: array

  15. 15

    Kotlin使用另一个对象作为默认构造函数参数创建新对象

  16. 16

    在另一个类对象中初始化一个对象(在对该构造函数执行一些操作之后)。

  17. 17

    用参数初始化另一个类构造函数中的对象

  18. 18

    初始化变量后在另一个类中构造对象

  19. 19

    我们可以在另一个类的构造函数的帮助下初始化对象吗?

  20. 20

    无法初始化向量来保存使用其构造函数初始化的另一个类

  21. 21

    我如何获得一个类成员函数以访问另一个类成员函数的私有成员?

  22. 22

    C ++-如何在另一个类中使用私有构造函数实例化对象

  23. 23

    如何使用一个类的构造函数作为Java中另一个类的对象的参数?

  24. 24

    另一个类的c ++私有对象:初始化并使用它调用该类中的函数

  25. 25

    另一个类中的参数化对象初始化

  26. 26

    如何将对象的动态数组传递给另一个类的参数化构造函数?

  27. 27

    如何在构造函数中将对象数组作为参数传递,然后将传递的数组复制到另一个数组(仍在构造函数中)

  28. 28

    如何初始化一个类并将对象传递给Android中的构造函数?

  29. 29

    如何初始化作为另一个类的成员变量的基类对象?

热门标签

归档