Как установить родительские элементы при создании унаследованной структуры в C ++ - PullRequest
2 голосов
/ 06 апреля 2011

У меня есть тип структуры A, который я могу создать с помощью A(p_a1, p_a2), и тип структуры B, который наследуется от A, который я могу создать с помощью B(p_b1, p_b2, p_b3).

Есть ли стандартный способ создания экземпляра B с настройкой p_a1 и p_a2?Могу ли я установить их после создания B экземпляра с b.p_a1 = v_a1; b.p_a2 = v_a2?

(Простите за неправильное использование терминологии. У меня нет большого опыта работы с C ++.)

Спасибо

Ответы [ 3 ]

4 голосов
/ 06 апреля 2011

Вы ищете функцию C ++ с именем списки инициализации конструктора. Этот пример должен прояснить это вам:

#include <iostream>
class Foo
{
        public:
        Foo( int x ) 
        {
                std::cout << "Foo's constructor " 
                          << "called with " 
                          << x 
                          << std::endl; 
        }
};

class Bar : public Foo
{
        public:
        Bar(int x, int y, int z) : Foo( x )  // construct the Foo part of Bar
        { 
                std::cout << "Bar's constructor" << std::endl; 
        }
};

int main()
{
        Bar stool(10,11,12);
}
3 голосов
/ 06 апреля 2011

То, что вы намереваетесь сделать, достижимо с помощью списков инициализации и может быть сделано следующим образом:

struct A
{
    A(int _a):a(_a){}
};

    struct B : public A
    {
        B(int _a, int _b):A(a), b(_b){}
    } ;

В приведенном вами примере кода то, что вы делаете в этих строках b.p_a1 = v_a1; b.p_a2 = v_a2, называетсяназначение.В то время как первый вызовет только правильный конструктор, второй вызовет конструктор по умолчанию.

3 голосов
/ 06 апреля 2011

Попробуйте следующее

struct A { 
  int _a1; 
  int _a2; 
  A(int a1, int a2); //assume it is defined
};

struct B : public A {
  int _b1;
  B(int p1, int p2, int p3);
};

B(int p1, int p2, int p3)
: A(p1,p1), // <<== This is where parent member variables will be initialized. 
  _b1(p3) //or some other way to populate _b1
{ }

google "Список инициализации конструктора C ++"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...