标签:c++
C++在使用对象指针时经常要考虑这样一样问题:指针的初始化,对象何时创建,何时释放。这无疑给程序员加重了负担,程序员不仅要考虑业务逻辑,还要时时刻刻刻指针在何时创建和释放。那有没有什么办法可以解决这个问题呢?答案是肯定的,下面就通过一个例子来讲解这种模式。AircraftCarrier
/* 航空母舰
* File: AircraftCarrier.h
* Author: luowf
*
* Created on July 31, 2014, 8:03 PM
*/
#ifndef AIRCRAFTCARRIER_H
#define AIRCRAFTCARRIER_H
#include "stdafx.h"
class AircraftCarrier {
protected:
AircraftCarrier();
AircraftCarrier(const AircraftCarrier& orig);
virtual ~AircraftCarrier();
public:
void SetName(const string& name)
{
m_name = name;
}
string GetName()
{
return m_name;
}
private:
string m_name;
friend class CVSG;
};
#endif /* AIRCRAFTCARRIER_H */
/* 舰载机
* File: ShipboardAircraft.h
* Author: luowf
*
* Created on August 1, 2014, 9:26 AM
*/
#ifndef SHIPBOARDAIRCRAFT_H
#define SHIPBOARDAIRCRAFT_H
#include "stdafx.h"
class ShipboardAircraft {
protected:
ShipboardAircraft();
ShipboardAircraft(const ShipboardAircraft& orig);
virtual ~ShipboardAircraft();
public:
void SetName(const string& name)
{
m_name = name;
}
string GetName()
{
return m_name;
}
private:
string m_name;
friend class CVSG;
};
#endif /* SHIPBOARDAIRCRAFT_H */
CVSG.h
/* 航空母舰战斗群
*
* File: CVSG.h
* Author: luoweifu
*
* Created on July 31, 2014, 7:49 PM
*/
#ifndef CVSG_H
#define CVSG_H
#include "stdafx.h"
#include <string>
using namespace std;
class AircraftCarrier;
class ShipboardAircraft;
class CVSG {
protected:
CVSG();
CVSG(const CVSG& orig);
virtual ~CVSG();
public:
//创建航母
AircraftCarrier* CreateAircraftCarrier();
//添加舰载机
ShipboardAircraft* AddShipboardAircraft();
void SetName(const string& name);
string GetName();
private:
typedef vector<ShipboardAircraft*> ShipAircVec;
ShipAircVec m_vecShipboardAircraft;
AircraftCarrier* m_pAircraftCarrier;
string m_name;
};
#endif /* CVSG_H */
CVSG.cpp
/* 航空母舰战斗群
*
* File: CVSG.cpp
* Author: luoweifu
*
* Created on July 31, 2014, 7:49 PM
*/
//==================================================
#include "CVSG.h"
#include "AircraftCarrier.h"
#include "ShipboardAircraft.h"
//==================================================
CVSG::CVSG() : m_pAircraftCarrier(NULL), m_name("") {
m_vecShipboardAircraft.empty();
}
CVSG::CVSG(const CVSG& orig) {
}
CVSG::~CVSG() {
if(m_pAircraftCarrier != NULL)
{
delete m_pAircraftCarrier;
m_pAircraftCarrier = NULL;
}
for(ShipAircVec::iterator itr = m_vecShipboardAircraft.begin(); itr != m_vecShipboardAircraft.end(); itr ++)
{
if(*itr != NULL)
{
delete *itr;
*itr = NULL;
}
}
m_vecShipboardAircraft.clear();
}
AircraftCarrier* CVSG::CreateAircraftCarrier() {
if(m_pAircraftCarrier == NULL)
{
m_pAircraftCarrier = new AircraftCarrier();
}
return m_pAircraftCarrier;
}
ShipboardAircraft* CVSG::AddShipboardAircraft() {
ShipboardAircraft* pShipboardAircraft = new ShipboardAircraft();
if(pShipboardAircraft != NULL)
{
m_vecShipboardAircraft.push_back(pShipboardAircraft);
}
return pShipboardAircraft;
}
void CVSG::SetName(const string& name)
{
m_name = name;
}
string CVSG::GetName()
{
return m_name;
}标签:c++
原文地址:http://blog.csdn.net/luoweifu/article/details/38389821