关于NVI手法
#include <iostream>
using namespace std;
enum ShapeColor{Red,Green,Blue};
class Shape
{
public:
void draw(ShapeColor color=Red)const
{
doDraw(color);
}
private:
virtual void doDraw(ShapeColor color) const=0;
};
class Rectangle:public Shape
{
public:
private:
virtual void doDraw(ShapeColor color) const;
};
void Rectangle::doDraw(ShapeColor color) const
{
cout<<"Rectangle's doDraw"<<"color= "<<color<<endl;
}
int main()
{
Shape*p=new Rectangle;
p->draw();
return 0;
}
#include <iostream>
using namespace std;
enum ShapeColor{Red,Green,Blue};
class Shape
{
public:
void draw(ShapeColor color=Red)const
{
doDraw(color);
}
private:
virtual void doDraw(ShapeColor color) const
{
cout<<"Shape's doDraw"<<"color= "<<color<<endl;
}
};
class Rectangle:public Shape
{
public:
private:
virtual void doDraw(ShapeColor color) const;
};
void Rectangle::doDraw(ShapeColor color) const
{
cout<<"Rectangle's doDraw"<<"color= "<<color<<endl;
}
int main()
{
Shape*p=new Shape;
p->draw();
delete p;
p=NULL;
Shape*q=new Rectangle;
q->draw();
delete q;
q=NULL;
return 0;
}
#include <iostream>
using namespace std;
enum ShapeColor{Red,Green,Blue};
class Shape
{
public:
void draw(ShapeColor color=Red)const
{
doDraw(color);
}
private:
void doDraw(ShapeColor color) const
{
cout<<"Shape's doDraw"<<"color= "<<color<<endl;
}
};
class Rectangle:public Shape
{
public:
private:
void doDraw(ShapeColor color) const;
};
void Rectangle::doDraw(ShapeColor color) const
{
cout<<"Rectangle's doDraw"<<"color= "<<color<<endl;
}
int main()
{
Shape*p=new Shape;
p->draw();
delete p;
p=NULL;
Shape*q=new Rectangle;
q->draw();
delete q;
q=NULL;
return 0;
}