By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
432,245 Members | 884 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 432,245 IT Pros & Developers. It's quick & easy.

does the default constructor initialize values?

P: n/a
does the default constructor initialize values?

I have a class as defined below:

class A
{

int i;
char c;
int * iPtr;

};
Does the default constructor initialize the values of i, c & iPtr?

If so, what are the values that they each get initialized to?

thanks.

Jul 20 '06 #1
Share this Question
Share on Google+
12 Replies


P: n/a

NewToCPP wrote:
does the default constructor initialize values?

I have a class as defined below:

class A
{

int i;
char c;
int * iPtr;

};
Does the default constructor initialize the values of i, c & iPtr?

If so, what are the values that they each get initialized to?
It zero initializes them.
>
thanks.
Jul 20 '06 #2

P: n/a
* Noah Roberts:
NewToCPP wrote:
>does the default constructor initialize values?

I have a class as defined below:

class A
{

int i;
char c;
int * iPtr;

};
Does the default constructor initialize the values of i, c & iPtr?

If so, what are the values that they each get initialized to?

It zero initializes them.
No, it does exactly nothing (in this class).

int main()
{
A o; // Default-constructed, members of o are not initialized.
}

--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
Jul 20 '06 #3

P: n/a
NewToCPP wrote:
does the default constructor initialize values?
That depends.
I have a class as defined below:

class A
{

int i;
char c;
int * iPtr;

};
Note that this class is quite useless, because all the members are private.
Does the default constructor initialize the values of i, c & iPtr?
In this case, the default constructor will be generated by the compiler. It
does nothing, so no, the values won't get initialized.

Jul 20 '06 #4

P: n/a

Alf P. Steinbach wrote:
* Noah Roberts:
NewToCPP wrote:
does the default constructor initialize values?

I have a class as defined below:

class A
{

int i;
char c;
int * iPtr;

};
Does the default constructor initialize the values of i, c & iPtr?

If so, what are the values that they each get initialized to?
It zero initializes them.

No, it does exactly nothing (in this class).

int main()
{
A o; // Default-constructed, members of o are not initialized.
}
That doesn't actually call the default constructor of a POD though.

A o = A();

Jul 20 '06 #5

P: n/a
NewToCPP posted:
class A
{

int i;
char c;
int * iPtr;

};

That is equivalent to:

struct A {
private:

int i;
char c;
int *p;
};
Let's remove the "private" as it just complicates the example. So we have:

struct A {

int i;
char c;
int *p;
};

int main()
{
A obj1; /* Contains garbage */

A obj2 = {}; /* Each member gets its default value */

A obj3 = A(); /* Each member gets its default value */

A static obj4; /* Each member gets its default value */
}

--

Frederick Gotham
Jul 20 '06 #6

P: n/a
* Noah Roberts:
Alf P. Steinbach wrote:
>* Noah Roberts:
>>NewToCPP wrote:
does the default constructor initialize values?

I have a class as defined below:

class A
{

int i;
char c;
int * iPtr;

};
Does the default constructor initialize the values of i, c & iPtr?

If so, what are the values that they each get initialized to?
It zero initializes them.
No, it does exactly nothing (in this class).

int main()
{
A o; // Default-constructed, members of o are not initialized.
}

That doesn't actually call the default constructor of a POD though.

A o = A();
On the contrary. What you have here is copy construction from a
zero-initialized instance (the expression 'A()' means
default-initialization, 8.5/7, which for a POD is defined as
zero-initialization, 8.5/5). That's not to say that 'A o;' necessarily
actually calls a default constructor: it doesn't affect the outcome
whether you say that there is no default constructor for a POD class (no
call), or that the default constructor does absolutely nothing (call
does nothing), but the standard specifies an implicitly declared default
constructor, 12.1/5, which if it actually exists must do nothing at all.

In particular, if you derive from class A,

struct A { /* as before */ };

struct B: A { int x; int y; B(): x(1), y(2) {} };

B o;

then you have an object 'o' with x and y initialized, and i, c, and iPtr
uninitialized. If class A had a default constructor that did
zero-initialization, then instead you would have i, c and iPtr zeroed.
But that isn't what you get, so the notion of a zeroing automatically
generated default constructor leads to incorrect, dangerous conclusions.

However, with a /conforming/ compiler,

struct B: A { int x; int y; B(): x(1), y(2), A() {} };

should ensure zero-initializion of the A base class sub-object; for a
POD this syntax does not denote a call of the (possibly existing or not)
default constructor, it instead denotes default initialization which is
defined as zero-initialization (references given above).

--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
Jul 20 '06 #7

P: n/a
Does it initialize if the members are public?
Rolf Magnus wrote:
NewToCPP wrote:
does the default constructor initialize values?

That depends.
I have a class as defined below:

class A
{

int i;
char c;
int * iPtr;

};

Note that this class is quite useless, because all the members are private.
Does the default constructor initialize the values of i, c & iPtr?

In this case, the default constructor will be generated by the compiler. It
does nothing, so no, the values won't get initialized.
Jul 20 '06 #8

P: n/a
Frederick:

What are the default values for each of those members?

I guess for "i ==0", "iPtr == NULL" what is default for c?

Frederick Gotham wrote:
NewToCPP posted:
class A
{

int i;
char c;
int * iPtr;

};


That is equivalent to:

struct A {
private:

int i;
char c;
int *p;
};
Let's remove the "private" as it just complicates the example. So we have:

struct A {

int i;
char c;
int *p;
};

int main()
{
A obj1; /* Contains garbage */

A obj2 = {}; /* Each member gets its default value */

A obj3 = A(); /* Each member gets its default value */

A static obj4; /* Each member gets its default value */
}

--

Frederick Gotham
Jul 20 '06 #9

P: n/a
NewToCPP posted:
Frederick:

What are the default values for each of those members?

I guess for "i ==0", "iPtr == NULL" what is default for c?

Numeric types, e.g. integer types and floating point types, get 0.

("char" is a numeric type.)
"bool" becomes false.
Pointers get the null pointer value.
In all cases, it's as if you'd written:

IntrinsicType object = 0;

--

Frederick Gotham
Jul 20 '06 #10

P: n/a
What does it do in case of non-public members?
Frederick Gotham wrote:
NewToCPP posted:
Frederick:

What are the default values for each of those members?

I guess for "i ==0", "iPtr == NULL" what is default for c?


Numeric types, e.g. integer types and floating point types, get 0.

("char" is a numeric type.)
"bool" becomes false.
Pointers get the null pointer value.
In all cases, it's as if you'd written:

IntrinsicType object = 0;

--

Frederick Gotham
Jul 20 '06 #11

P: n/a
NewToCPP wrote:
Rolf Magnus wrote:
>NewToCPP wrote:
>>does the default constructor initialize values?
That depends.
>>I have a class as defined below:

class A
{

int i;
char c;
int * iPtr;

};
Note that this class is quite useless, because all the members are private.
>>Does the default constructor initialize the values of i, c & iPtr?
In this case, the default constructor will be generated by the compiler. It
does nothing, so no, the values won't get initialized.

Does it initialize if the members are public?
No.

Also, look at the fourth bullet point in this FAQ:
http://www.parashift.com/c++-faq-lit...t.html#faq-5.4

--
Alan Johnson
Jul 21 '06 #12

P: n/a
NewToCPP posted:
What does it do in case of non-public members?

Everything's the same, regardless of whether a member is public, private or
protected.
--

Frederick Gotham
Jul 21 '06 #13

This discussion thread is closed

Replies have been disabled for this discussion.