C++, просто смешно… 1

Posted by Андрей on Февраль 07, 2008

Что выведет данный код?

#include <stdio.h>

struct A
{
    A(int x = 3) { printf("%d\n", x); }
};

struct B: virtual public A
{
   B() : A(4) {}
}; 


struct C: virtual public A
{
  C() : A(5) { }
}; 

struct D: public B, public C
{

};

int main()
{
    D d;
    B b;
    C c;

    return 0;
}

Ответ:

3
4
5

Что самое смешное, можно из D::D() явно вызвать конструктор A с другим параметром. Наслаждаемся в C++ смесью виртуального наследования, раздельной компиляции и полученной кривости.

Trackbacks

Use this link to trackback from your own site.

Comments

Leave a response

  1. Stepan Ср, 30 Июл 2008 23:11:33 UTC

    Спасибочки автору. Возможно, в будущем я и действительно реализую аналогичную идею. :)

Comments