Шаблоны классов: Порядок строительства

template < class T1, class T2 >
class A
{
    T1 x;
    T2 y;

  public:
    A(T1 a, T2 b)
    {
        x = a;
        y = b;
        cout << x << " " << y << endl;
    }

    A(T2 b, T1 a)
    {
        x = a;      
        y = b;      
        cout << x << " " << y << endl;
    } 
};

int main()
{
    A<int, float> obj1(1, 2.5);
    A<float, int> obj2(1, 2.5);

    return 0;
}

Я понимаю, почему obj1 вызвал первый конструктор, но почему второй конструктор вызывается, когда создается экземпляр obj2?

4 голоса | спросил D Mehta 19 J000000Saturday14 2014, 11:59:48

2 ответа


0

Поскольку T1 и T2 float и int соответственно, поэтому конструкторы выглядеть как

   A (float a, int b ) // first

   A (int a, float b ) // second

Аргументами конструктора являются int и double соответственно. Второй конструктор обеспечивает лучшее соответствие, чем первый.

ответил juanchopanza 19 J000000Saturday14 2014, 12:02:59
0

Когда объект obj1 класса A создан, создание экземпляра:

A < int, float > obj1 ( 1, 2.5 ) 

сообщает компилятору, что T1 следует рассматривать как int и T2 должны рассматриваться как float. Следовательно, объект видит два конструктора как:

A ( int a, float b ) // first

A ( float a, int b ) //second

Исходные значения, передаваемые в obj1, являются (int) 1 и (double) 2.5, и поскольку конструктор 1 кажется более подходящим, он выполняется.

Теперь, когда объект obj2 создан, создание экземпляра:

A < float, int > obj1 ( 1, 2.5 ) 

сообщает компилятору, что T1 следует рассматривать как float и T2 должны рассматриваться как int. Следовательно, объект видит два конструктора как:

A ( float a, int b ) // first

A ( int a, float b ) //second

Исходные значения, передаваемые в obj1, являются (int) 1 и (double) 2.5, и поскольку конструктор 2 кажется более подходящим, он выполняется.

ответил D Mehta 19 J000000Saturday14 2014, 13:38:45

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132