c++ - object array intializer in c++

In my previous post - we have discussed on the topic of  c++ - copy constructor and the initializer constructor in container and array.

 

 

Now, since we have conver the destructor and construcotr , we know there is default constructor, copy constructor, constructor that is marked explicit, and we know a single argument constructor can be be think of the conversion constructor...

 

now let's revisit the array/object initializer...below is the code and the comment inside it shall be enough to tell the key point of the object initializer ....

 

 

 

/**
* file 
*   array_initializer.cpp
* description: 
*   This shows how to use the array initializer to apply the array initialization
*/

#include "stdafx.h"
#include "acct.h"
#include <iostream>

using std::cout;
using std::endl;
using std::cerr;


void test_array_initializer() { 
	cout << "initialize with the default single argument" << endl;

	// if object only has one single explicit constructor argument ,you can do this 
	Account pooh_pals_single_args[] = { "piglet", "Eeyore", "Tigger" };

	// and of course, if you want to specify mutiple arguments, here is the way 
	// ther is one misunderstood in that 
	// if will first call the 
	//    Account ("piglet", 1000.0);
	// and then the copy constructor will be called
	//   Account(const Account & rhs);
	// the misconcept is that it will first create the temporary objects, which are 
	// in the { ... } 
	// block, then pooh_pals_mutiple_args will be invoked to get the right object contructed. 
	//
	cout << "initialize with the multiple arguments" << endl;
	Account pooh_pals_multiple_args[] = {
		 Account("piglet", 1000.0),
		 Account("Eeyore", 1000.0),
		 Account("Tigger", 1000.0)
	};

	// if you want to initialize some with the default constructor, here is the way how you do it
	cout << "initialize with the multiple arguments mixed with default argument" << endl;
	Account pooh_pals_multiple_args_with_default_constructor[] = { 
		Account("piglet", 1000.0),
		Account("Eeyore", 1000.0),
		Account(),
	};

	// and if you specify the size, but in the initializer list, there is no insufficient  number of 
	// object in the initializer list, 
	// then the default constructor will be called
	cout << "Default constructor will be called if the initializer list number is smaller than the array/contaier size" << endl;
	Account pooh_pals_multiple_args_with_insufficient_objects[3] = {
		Account("piglet", 1000.0),
		Account("Eeyore", 1000.0),
	};

	// while if you are calling the new opertor, there is no way to specify the initializer with arguments
	cout << "default constructo will be called new operator on the heap" << endl;
	Account * pact = new Account[10];

	// 
	delete[] pact;

}

 

 

and below is the definition of the Account class's header file. 

 

class Account {

public:

/* =================
* ctor and dtors
========================*/
	Account();
	// since a constructor that takes only a single parameter can serves as a conversion operator
	// we don't want tripwire people into the trap of 
	//  Account acct = "new user";
	// to help curb/reign this kind of unwantted/unwelcome compiler aid, the explicit keyword is introduced 
	//  
	//explicit
	//Account(const char *, double = 0.0);
	
	// for the purpose of demo the use of the array initalizer, we decide to use the implicit constructor approach
	Account(const char *, double = 0.0);

	// the copy constructor 
	// the most important thing about the copy constructor is to decide whether or not to provide the copy constructor
	// the how as to implements the copy constructor comes seconds
	Account(const Account & );


	~Account();

	const char * name();
// ...
}
 

你可能感兴趣的:(C++)