디자인 모델 의 허구 함수 모델
3120 단어 디자인 모드
2, 인 스 턴 스 코드:
#include <iostream>
#include <stdexcept>
#include <vector>
using namespace std;
class Shape
{
Shape* s;
Shape(const Shape&);
Shape operator=(Shape&);
//
// .
protected:
Shape(){ s=0; }// :" " s .
//" " ,s , " " s 0
public:
virtual void draw(){ s->draw(); };
virtual ~Shape() //
// s!=0;
// , , s==0,delete s .
{
cout<<"~Shape"<<endl;
delete s;// :delete 0 ,
}
class shape_error : public logic_error
{
public:
shape_error(string type):logic_error("Cann't create shape: "+type){}
};
Shape(string type) throw(shape_error);
};
class Circle : public Shape
{
Circle(){}// ,
Circle(const Circle&);
Circle operator=(Circle&);
friend class Shape;
public:
void draw(){ cout<<"Circle:Draw"<<endl; }
~Circle(){ cout<<"Circle:~Circle"<<endl; }
};
class Square : public Shape
{
Square(){}// ,
Square(const Square&);
Square operator=(Square&);
friend class Shape;
public:
void draw(){ cout<<"Square:Draw"<<endl; }
~Square(){ cout<<"Square:~Square"<<endl; }
};
//
Shape::Shape(string type) throw(Shape::shape_error)
{
if(type=="Circle")
s=new Circle;
else if(type=="Square")
s=new Square;
else throw shape_error(type);
}
char* sl[] = { "Circle", "Square", "Square", "Circle", "Circle", "Circle", "Square" };
int main()
{
vector<Shape*> shapes;
try
{
for(size_t i = 0; i < sizeof sl / sizeof sl[0]; i++)
shapes.push_back(new Shape(sl[i]));// Shape .
} catch(Shape::shape_error& e)
{
cout << e.what() << endl;
for(vector<Shape*>::iterator ite=shapes.begin();ite!=shapes.end();ite++)
{
delete *ite;
}
return EXIT_FAILURE;
}
for(size_t i = 0; i < shapes.size(); i++)
{
shapes[i]->draw();
}
// : Shape , delete s, , , delete s
// s=0, .
for(vector<Shape*>::iterator ite=shapes.begin();ite!=shapes.end();ite++)
{
delete *ite;
cout<<endl;
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.