C++ 如何访问对象的成员变量的解引用值

C++ 如何访问对象的成员变量的解引用值,c++,pointers,initialization,copy-constructor,C++,Pointers,Initialization,Copy Constructor,我试图复制传递给复制构造函数的对象。我想访问传递给此函数的对象的成员变量的解引用值,但在标记int*c=new intother.*pa之前,我得到了一个错误预期的非限定id 该类定义如下: class Foo { Public: int *a, *b; Foo(const Foo &); //copy constructor } Foo::Foo(const Foo& other) { int* c = new int(other.(*a)); i

我试图复制传递给复制构造函数的对象。我想访问传递给此函数的对象的成员变量的解引用值,但在标记int*c=new intother.*pa之前,我得到了一个错误预期的非限定id

该类定义如下:

class Foo {
Public:
   int *a, *b;
   Foo(const Foo &); //copy constructor
}
Foo::Foo(const Foo& other) {
    int* c = new int(other.(*a));
    int* d = new int(other.(*b));
 }
Foo first(1,2);
Foo second(first); 
我的职能是:

class Foo {
Public:
   int *a, *b;
   Foo(const Foo &); //copy constructor
}
Foo::Foo(const Foo& other) {
    int* c = new int(other.(*a));
    int* d = new int(other.(*b));
 }
Foo first(1,2);
Foo second(first); 
主要定义如下:

class Foo {
Public:
   int *a, *b;
   Foo(const Foo &); //copy constructor
}
Foo::Foo(const Foo& other) {
    int* c = new int(other.(*a));
    int* d = new int(other.(*b));
 }
Foo first(1,2);
Foo second(first); 

复制构造函数可以如下所示

Foo::Foo(const Foo& other) : a( new int( *other.a ) ), b( new int( *other.b ) )
{
}
这是一个演示程序

#include <iostream>

class Foo {
public:
   int *a, *b;

   Foo( int x, int y ) : a( new int( x ) ), b( new int( y ) )
   {
   }

   Foo( const Foo &other  ) : a( new int( *other.a ) ), b( new int( *other.b ) )
   {
   }
};

int main() 
{
    Foo first(1,2);
    Foo second(first); 

    std::cout << *first.a << ", " << *first.b << '\n';
    std::cout << *second.a << ", " << *second.b << '\n';

    return 0;
}

所有其他特殊的成员函数,例如析构函数,我希望您可以自己定义。

复制构造函数可以如下所示

Foo::Foo(const Foo& other) : a( new int( *other.a ) ), b( new int( *other.b ) )
{
}
这是一个演示程序

#include <iostream>

class Foo {
public:
   int *a, *b;

   Foo( int x, int y ) : a( new int( x ) ), b( new int( y ) )
   {
   }

   Foo( const Foo &other  ) : a( new int( *other.a ) ), b( new int( *other.b ) )
   {
   }
};

int main() 
{
    Foo first(1,2);
    Foo second(first); 

    std::cout << *first.a << ", " << *first.b << '\n';
    std::cout << *second.a << ", " << *second.b << '\n';

    return 0;
}

所有其他特殊的成员函数,例如析构函数,我希望您自己定义。

将值分配给对象成员

Foo::Foo(const Foo& other) {
    this->a = new int(other.(*a));
    this->b = new int(other.(*b));
 }

将值指定给对象成员

Foo::Foo(const Foo& other) {
    this->a = new int(other.(*a));
    this->b = new int(other.(*b));
 }

您定义构造函数的方式与Foo::Fooint a,int b{int*x=new inta;int*y=new intb;}@Reno使用初始值设定项列表的方式有什么不同吗?与Vlad一样,Foo::Fooint a,int b{int*x=new inta;int*y=new intb;}@Reno是初始化成员变量的首选方法。对于指针,结果是相同的,但对于任何具有构造函数的对象,差异可能会非常不同。@Reno-一个关键区别是,Vlad的方法实际上可以初始化Foos成员,而您的方法不会,因为它将自动存储持续时间的变量分配给构造函数时不再存在的变量完成,而不是此构造函数中的Foo@Reno的成员Foo::Fooint a,int b{int*x=new inta;int*y=new intb;您声明了局部变量x和y,这些变量在退出构造函数后将不再存在。@Reno在构造函数体中使用赋值运算符。一般来说,您应该像我所说的那样使用mem初始值设定项。您定义构造函数和Fo的方式有什么不同吗o::Fooint a,int b{int*x=new inta;int*y=new intb;}@Reno与Vlad一样,使用初始值设定项列表是初始化成员变量的首选方法。对于指针,结果是相同的,但对于任何具有构造函数的对象,差异可能非常不同。@Reno-一个关键区别是Vlad的方法实际上可以初始化Foos成员,而您的方法不会初始化since它分配给自动存储持续时间的变量,这些变量在构造函数完成时不再存在,而不是这个构造函数中的Foo@Reno的成员Foo::Fooint a,int b{int*x=new inta;int*y=new intb;您声明的局部变量x和y在退出构造函数后将不存在。@Reno在构造函数体中使用赋值运算符。一般来说,您应该像我所说的那样使用mem初始值设定项。有几点是否定的。我会在它被其他人否决之前进行修复。1:D不使用此选项2:*a星型不在d引用本地对象的位置。3:使用初始值设定项列表。4:使用此选项需要一个指针而不是一个点。a和此.b无效-即编译器需要将该用法诊断为错误-因为这是一个指针,而不是引用。在几个方面不需要。我会修复在它被其他人否决之前。1:不要使用这个2:*a星不会出现在d引用本地对象的地方。3:使用初始值设定项列表。4:使用它需要一个指针而不是一个点。a和这个.b是无效的-也就是说,编译器需要将该用法诊断为错误-因为这是一个指针,而不是一个重设引用。