具有默认值的动æ€å†…存分é…

时间:2010-06-10 17:17:02

标签: c++

class A
{
private:
int m_nValue;
public:
A()
{
m_nValue = 0;
}
A(int nValue)
{
m_nValue = nValue);
~A()
{}
}

现在主è¦æ˜¯å¦‚果我打电è¯

A a(2);// 2 will be assigned for m_nValue of object A.

现在,如果我想定义一个对象数组,我们该如何åšã€‚ 如果我使用operator new动æ€åˆ›å»ºå¯¹è±¡ï¼Œæˆ‘们如何åšåˆ°è¿™ä¸€ç‚¹ 喜欢

A *pA;
pA = new A[5];// while creating the object i want the parameterised constructor to be 

//called

我希望问题很清楚。如果需è¦æ›´å¤šè§£é‡Šï¼Œè¯·å‘Šè¯‰æˆ‘

4 个答案:

答案 0 :(得分:5)

ä½ ä¸èƒ½è¿™æ ·åšã€‚

如果è¦åŠ¨æ€åˆ†é…数组,则必须是默认构造对象。这æ„味ç€ï¼Œå®ƒéœ€è¦ä¸€ä¸ªæ²¡æœ‰å‚数的构造函数,这是将è¦ä½¿ç”¨çš„构造函数。

答案 1 :(得分:2)

  

如果我想定义一个对象数组

这是C ++,你ä¸éœ€è¦æ•°ç»„; - )

std::vector<A> v(5, A(2));

答案 2 :(得分:1)

你通常ä¸èƒ½è¿™æ ·åšï¼Œå› ä¸ºæ•°ç»„对象是默认构造的,但是你å¯ä»¥åˆ›å»ºä¸€ä¸ªå­ç±»ï¼Œå…¶é»˜è®¤æž„造函数将你想è¦çš„å‚数传递给基类。

template<int I>
class B : public A
{
public:
     B() : A(I) { }
};
...

A *pA;
pA = new B<42>[5];
然而,在æŸäº›åœˆå­é‡Œï¼Œä»¥è¿™ç§æ–¹å¼æ»¥ç”¨ç»§æ‰¿æƒæ˜¯ä¸å—欢迎的。

答案 3 :(得分:1)

如果è¦å®šä¹‰æ•°ç»„,å¯ä»¥ä½¿ç”¨èšåˆåˆå§‹å€¼è®¾å®šé¡¹

A a[5] = { 1, 2, 3, 4, 5 };

请注æ„,èšåˆåˆå§‹åŒ–éµå¾ªå¤åˆ¶åˆå§‹åŒ–语义,因此对于æ¯ä¸ªå…ƒç´ ï¼Œå®ƒå°†ç­‰åŒäºŽ

A a1 = 1;

ä¸æ˜¯åŽŸæ¥çš„

A a1(1);

对于new-expression ...ä½ å¯ä»¥åœ¨æ•°ç»„new-expression中æ供的唯一åˆå§‹åŒ–器是空的()åˆå§‹åŒ–器,它触å‘值åˆå§‹åŒ–。目å‰è¯¥è¯­è¨€ä¸æ”¯æŒå…¶ä»–åˆå§‹å€¼è®¾å®šé¡¹ã€‚