cpp默认构造函数和æˆå‘˜åˆå§‹åŒ–列表?

时间:2014-11-12 13:56:51

标签: c++

class test
{
public:
    test(int x)
    {
        val = x;
    }
private:
    int val;
};

test t(3);

我对这段代ç å¾—到了2分。

  1. test t(3)首先调用默认构造函数,然åŽæ‰§è¡Œval = 3

  2. 如果至少有一个用户定义的构造函数,那么编译器ä¸ä¼šç”Ÿæˆéšå¼é»˜è®¤æž„造函数

  3. 有矛盾å—?

3 个答案:

答案 0 :(得分:2)

test t(3);

调用å‚数化构造函数(å‚数为3)而ä¸æ˜¯é»˜è®¤æž„造函数。是的,如果您使用å‚数定义å•ä¸ªæž„造函数,则编译器将ä¸ä¼šç”Ÿæˆdfault构造函数。

答案 1 :(得分:1)

  

test t(3)首先调用默认构造函数,然åŽæ‰§è¡Œval = 3

没有调用默认构造函数。 val在test构造函数体之å‰é»˜è®¤åˆå§‹åŒ–;如果val是具有默认构造函数的类型,则将调用该构造函数。但int没有构造函数,默认åˆå§‹åŒ–åªä¼šä½¿å…¶å¤„于未åˆå§‹åŒ–状æ€ä¸”具有ä¸ç¡®å®šçš„值。

也许您认为这å¯èƒ½ä¼šè°ƒç”¨test的默认构造函数。它没有;除éžæ‚¨æ˜Žç¡®å§”托给该构造函数,å¦åˆ™test的构造函数ä¸ä¼šè¿™æ ·åšã€‚

  

如果至少有一个用户定义的构造函数,那么编译器ä¸ä¼šç”Ÿæˆéšå¼çš„默认构造函数

这是正确的,声明任何构造函数都会阻止éšå¼é»˜è®¤æž„造函数。

  

有矛盾å—?

没有。 test没有默认构造函数,但这里没有任何东西试图使用这样的东西。

答案 2 :(得分:0)

ä¸ï¼Œè‡ªå®šä¹‰æž„造函数ä¸ä¼šè°ƒç”¨æ— å‚数构造函数,所以它并ä¸çŸ›ç›¾ã€‚

ä½ å¯èƒ½å°†ä¸¤ä¸ªä¸œè¥¿æ··åˆåœ¨ä¸€èµ· - æ¯ä¸ªæž„造函数都调用一个基类构造函数(默认情况下,或者如果指定å‚数,则调用其他东西)。