Как получить доступ к разыменованному значению переменной-члена объекта - PullRequest
1 голос
/ 29 октября 2019

Я пытаюсь скопировать объект, переданный в функцию конструктора копирования. Я хочу получить доступ к разыменованному значению переменной-члена объекта, которая передается этой функции, но я получаю сообщение об ошибке «ожидаемый неквалифицированный идентификатор перед» («token int * c = new int (other. (* Pa))»;

Определен класс:

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); 

Ответы [ 2 ]

5 голосов
/ 29 октября 2019

Конструктор копирования может выглядеть следующим образом:

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;
}

Его вывод

1, 2
1, 2

Все другие специальные функции-члены какнапример деструктор, я надеюсь, что вы определите себя.

0 голосов
/ 29 октября 2019

Назначение значений для членов объекта.

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