I read this code section from a tutorial, but I cannot understand it thoroughly. It is about Pointer & Class Pointer & Array Pointer.

This is it:

// pointer to classes example
#include <iostream>
using namespace std;

class CRectangle {
	private:
		int width, height;
	public:
		// prototype
		void set_values (int,int);
		// method
		int area (void) {
			return (width * height);
		}
};

// definion
void CRectangle :: set_values (int a, int b) {
	width = a;
	height = b;
}

void main () {
	CRectangle a, *b, *c;
	[b]CRectangle * d = new CRectangle[2];[/b]
	//
	b = new CRectangle;
	c = &a;
	a.set_values(1,2);
	b -> set_values(3,4);
	[b]d -> set_values(5,6);
	d[1].set_values(7,8);[/b]
	//
	cout << "a area: " << a.area() << endl;
	cout << "*b area: " << b -> area() << endl;
	cout << "*c area: " << c -> area() << endl;
	[b]cout << "d[0] area: " << d[0].area() << endl;
	cout << "d[1] area: " << d[1].area() << endl;[/b]
	//
	delete[] d;
	delete b;	
}

I try to search google and understand some parts of this code. But when it contains many concepts (i.e. pointer, array, class) in the BOLD section, I cannot grasp the points. Many operators (*, ->, etc. ), and I failed to distinguish between them.

Please explain it for me, especially the section in BOLD.

BTW, I see the "new" operator is very different from java one, is it right?

Thanks for any help.

Attachments
// pointer to classes example
#include <iostream>
using namespace std;

class CRectangle {
	private:
		int width, height;
	public:
		// prototype
		void set_values (int,int);
		// method
		int area (void) {
			return (width * height);
		}
};

// definion
void CRectangle :: set_values (int a, int b) {
	width = a;
	height = b;
}

void main () {
	CRectangle a, *b, *c;
	CRectangle * d = new CRectangle[2];
	//
	b = new CRectangle;
	c = &a;
	a.set_values(1,2);
	b -> set_values(3,4);
	d -> set_values(5,6);
	d[1].set_values(7,8);
	//
	cout << "a area: " << a.area() << endl;
	cout << "*b area: " << b -> area() << endl;
	cout << "*c area: " << c -> area() << endl;
	cout << "d[0] area: " << d[0].area() << endl;
	cout << "d[1] area: " << d[1].area() << endl;
	//
	delete[] d;
	delete b;	
}

>>CRectangle * d = new CRectangle[2];

That is just allocating an array of 2 CRectangle objects. It could have been written like then: CRectangle d[2]; . But if it did that then it could not replace the 2 with something else at runtime.

>>d -> set_values(5,6);
That is the same thing as d[0].set_values(5,6) only it uses -> operator. When using an array I prefer d[0].xxx instead of the pointer operator because it more clearly describes what that code is doing.

Comments
Thanks.

>I see the "new" operator is very different from java one, is it right?
Not especially. The Java new expression creates an object of the specified type, calls the specified constructor, and returns a reference to the object. This is pretty much identical to C++ where a new expression creates an object of the specified type, calls the specified constructor, and returns a pointer to the object. The only real difference (at the superficial level you should be comparing C++ and Java) is you can do more with a C++ pointer than a Java reference.

Comments
Thank for your info.
This question has already been answered. Start a new discussion instead.