// C2385
#include <stdio.h>
class A
{
public:
class X
{
public:
X(int i)
{
printf_s("\nIn X");
}
};
class B : public X
{
};
};
class C : A, A::B
{
public:
C(int n) : X(n)
{
}
};
int main()
{
C aC(1000);
}
Как мне в этом случае явно обратиться к конструктору класса "X"???
Здравствуйте, Sad_KirK, Вы писали:
...
S_K>Как мне в этом случае явно обратиться к конструктору класса "X"???
Если речь идет о невиртуальном наследовании, то наследник имеет доступ только к конструкторам непосредственных предков, и править нужно вот так:
class A
{
public:
class X
{
public:
X(int i)
{
}
};
class B : public X
{
public:
B(int i) : X(i) {}
};
};
class C : A, A::B
{
public:
C(int n) : A::B(n)
{
}
};
В случае с виртуальным наследованием потомки имеют доступ к виртуальной базе даже опосредовано:
class A
{
public:
class X
{
public:
X(int i=0)
{
}
};
class B : virtual public X
{
};
};
class C : A, A::B
{
public:
C(int n) : X(n)
{
}
};
Только тут не нужно забывать, что реально конструктор виртуальной базы вызывает самый потомственный (most-derived) потомок