/*类的构造函数(2)*/
#include "stdafx.h"
#include <iostream.h>
class Color
{
public:
Color()
{
cout << this << " color 无参构造" << endl;
}
~Color()
{
cout << this << " color 析构" << endl;
}
int m_nRed;
int m_nGreen;
int m_nBlue;
};
class MyPoint
{
private:
int m_nx;
int m_ny;
Color m_color2;
Color m_color1;
//成员对象的构造在前,本对象的构造在后
//析构过程相反 成员在后,本对象在前
//构造 客人->自己
//析构 自己->客人
//根据成员对象在类中定义的顺序,先后构造
public:
//当自定义了一个有参数构造时候,
//编译器不会再提供一个无参默认的构造
MyPoint(int nx,int ny)
{
cout << this << " Point 有参构造" << endl;
SetPoint(nx,ny);
}
MyPoint()
{
cout << this << " Point 无参构造" << endl;
m_nx = 0;
m_ny = 0;
}
~MyPoint()
{
cout << this << " Point 析构" << endl;
}
void SetPoint(int nx,int ny);
void SetColor(int nIndex,int nred, int ngreen , int nblue);
int GetPointx();
int GetPointy();
Color* GetColor(int nIndex);
};
void MyPoint::SetColor(int nIndex,
int nred, int ngreen ,int nblue)
{
if ( nIndex == 1 )
{
m_color1.m_nRed = nred;
m_color1.m_nGreen = ngreen;
m_color1.m_nBlue = nblue;
}
else if ( nIndex == 2 )
{
m_color2.m_nRed = nred;
m_color2.m_nGreen = ngreen;
m_color2.m_nBlue = nblue;
}
}
void MyPoint::SetPoint(int nx,int ny)
{
m_nx = nx;
m_ny = ny;
}
int MyPoint::GetPointx()
{
return m_nx;
}
int MyPoint::GetPointy()
{
return m_ny;
}
Color* MyPoint::GetColor( int nIndex )
{
if ( nIndex == 1 )
{
return &m_color1;
}
else if( nIndex == 2 )
{
return &m_color2;
}
return NULL;
}
int main()
{
MyPoint Point(10,20);
Point.SetColor(1,255,255,255);
Point.SetColor(2,0,0,0);
cout << "x is" << Point.GetPointx()
<< "y is" << Point.GetPointy() << endl;
for ( int nIndex = 0 ; nIndex <= 3 ; nIndex++ )
{
Color *pColor = Point.GetColor(nIndex);
if ( pColor )
{
cout << "color" << nIndex << " is" << " " << pColor->m_nRed
<< " " << pColor->m_nGreen << " " << pColor->m_nBlue << endl;
}
}
cout << "Color1 Address " << Point.GetColor(1) << endl;
cout << "Color2 Address " << Point.GetColor(2) << endl;
return 0;
}