class Persion //抽象基類
{
public:
virtual void SetDieAge(int x) = 0; //純虛函數
protected:
private:
};
class Man :public Persion
{
friend class God; //友元的使用
private:
virtual void SetDieAge(int x){m_Dieage = x;}
protected:
private:
static int m_TotalAge; //靜態成員
int m_Dieage;
};
int Man::m_TotalAge = 1000; //靜態成員初始化
class Wman:public Persion //繼承
{
friend class God;
private:
virtual void SetDieAge(int x){m_Dieage = x;}
protected:
private:
static int m_TotalAge;
int m_Dieage;
};
int Wman::m_TotalAge = 100; //類執行個體的對象都使用這一個拷貝
class God
{
public:
int TellYourDieAge(Man *p); //函數重載
int TellYourDieAge(Wman *p); //函數重載
void SetYourDieAge(Persion *p,int x); //多態 處理抽象基類就能夠 處理衍生類別
int TellYourTotalAge(Wman *p); //函數重載
int TellYourTotalAge(Man *p); //函數重載
protected:
private:
};
void God::SetYourDieAge(Persion *p,int x) //多態
{
p->SetDieAge(x);
}
int God::TellYourDieAge(Man *p)
{
return p->m_Dieage; //友元處理私人成員變數
}
int God::TellYourDieAge(Wman *p)
{
return p->m_Dieage;
}
int God::TellYourTotalAge(Wman *p)
{
return p->m_TotalAge;
}
int God::TellYourTotalAge(Man *p)
{
return p->m_TotalAge;
}
Man g_Man,g_Man1;
Wman g_Wman;
God g_God;
int _tmain(int argc, _TCHAR* argv[])
{
g_God.SetYourDieAge(&g_Man,80);
g_God.SetYourDieAge(&g_Wman,85);
printf("%d\n",g_God.TellYourDieAge(&g_Man));
printf("%d\n",g_God.TellYourTotalAge(&g_Man));
printf("%d\n",g_God.TellYourTotalAge(&g_Man1));
Sleep(5000);
return 0;
}