目录
1.纯虚函数如何定义?使用时应注意什么?
1)纯虚函数形式:
virtual void Area() = 0;
2)抽象类
包含纯虚函数的类是抽象类,抽象类不能定义对象,但是可以定义抽象类的指针或者引用,用它指向或者引用具体类的对象
3)抽象类作用
派生子类,作为类族最上面的基类出现,则在子类中必须要重写基类中的纯虚函数
注意:如果在子类中没有实现纯虚函数,那子类也是纯虚函数。
4)代码实现
class Shape
{
public:
//形状的周长和面积没办法求
virtual void Area() = 0;//函数入口地址为空,不需要实现体
virtual void Girth() = 0;
};
class Rectangle :public Shape
{
public:
Rectangle (int l,int m):m_length(l),m_width(m){}
virtual void Area()
{
cout << "Rectangle Area" << m_length*m_width<<endl;
}
virtual void Girth()
{
cout << "Rectangle Girth" <<m_length+m_width<< endl;
}
private:
int m_length;
int m_width;
};
class Circle :public Shape
{
public:
Circle(int r):m_ra(r){}
virtual void Area()
{
cout << "Circle Area" << 3.14*m_ra*m_ra<<endl;
}
virtual void Girth()
{
cout << "Circle Girth" <<2*3.14*m_ra<< endl;
}
private:
int m_ra;
};
class Triangle :public Shape
{
public:
Triangle(int l):m_length(l){}
virtual void Area()
{
cout << "Triangle Area" <<0.425*m_length*m_length<< endl;
}
virtual void Girth()
{
cout << "Triangle Girth" <<3*m_length<< endl;
}
private:
int m_length;
};
void test(Shape* p)//调用方式1
{
p->Area();
p->Girth();
}
void main()
{
Shape* pf[3];//指针数组 调用方式2
pf[0] = new Rectangle(4,6);
pf[1] = new Triangle(6);
pf[2] = new Circle(5);
for (int i = 0; i < 3; i++)//释放空间
{
pf[i]->Area();
pf[i]->Girth();
delete pf[i];
pf[i] = NULL;
}
}
截图:
5)纯虚函数和抽象类知识点总结
①纯虚函数的概念: 纯虚函数( pure virtual function )是指没有具体实现的虚成员函数。它用于这样的情况:设计一个类型时,会遇到无法定义类中虚函数的具体实现,其实现依赖于不同的派生类。 定义纯虚出数的一般格式为:
virtual 返回类型函数名(参数表)=0;
"=0"表明程序员将不定义该虚函数实现,没有函数体,只有函数的声明;函数的声明是为了在虚函数表中保留一个位置。"=0"本质上是将指向函数体的指针定义为 nullptr 。
②抽象类的概念: 含有纯虚函数的类是抽象类。 抽象类是一种特殊的类,它是为抽象的目而建立的,它处于继承层次结构的较上层。 抽象类不能实例化对象,因为纯虚函数没有实现部分,所以含有纯虚函数类型不能实例化对象;
③抽象类的主要作用: 将相关的类型组织在一个继承层次结构中,抽象类为派生类型提供一个公共的根,相关的派生类型是从这个根派生而来。