今日刷题之纯虚函数的知识

目录

1.纯虚函数如何定义?使用时应注意什么?

1)纯虚函数形式:

2)抽象类

3)抽象类作用

4)代码实现

5)纯虚函数和抽象类知识点总结


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 。

②抽象类的概念: 含有纯虚函数的类是抽象类。 抽象类是一种特殊的类,它是为抽象的目而建立的,它处于继承层次结构的较上层。 抽象类不能实例化对象,因为纯虚函数没有实现部分,所以含有纯虚函数类型不能实例化对象;

③抽象类的主要作用: 将相关的类型组织在一个继承层次结构中,抽象类为派生类型提供一个公共的根,相关的派生类型是从这个根派生而来。

猜你喜欢

转载自blog.csdn.net/weixin_62456756/article/details/128240995