当前位置: 首页 > news >正文

天津西青区离哪个火车站近广州 网站开发 公司电话

天津西青区离哪个火车站近,广州 网站开发 公司电话,宁波seo优化公司,长沙口碑好的做网站公司哪家好纯虚函数语法:virtual 返回值类型 函数名(参数列表) 0纯虚函数的作用:不用定义!在多态中,通常父类中虚函数的实现是无意义的(因为主要用子类重写的,父类只是为了派生子类当做一个类族的顶层出现&#xff0…

纯虚函数

语法:

virtual 返回值类型 函数名(参数列表) = 0

纯虚函数的作用:

不用定义!

在多态中,通常父类中虚函数的实现是无意义的(因为主要用子类重写的,父类只是为了派生子类当做一个类族的顶层出现),所以可以将虚函数改为纯虚函数。

抽象类:有纯虚函数的类叫做抽象类

纯虚函数的特点:无法实例化对象,子类必须重写抽象类中的纯虚函数,否则子类也属于纯虚函数(参考上一条)

抽象类 不能定义对象,但是可以定义抽象类的指针或者引用。


用抽象类指针创建子类对象

class Shape
{
public:virtual void Area() = 0; virtual void Perimeter() = 0;
};
class Triangle :public Shape
{
public:void Area() { cout << "T area" << endl; }void Perimeter() { cout << "T per" << endl; }Triangle(int l) :m_long(l) {}
private:int m_long;
};
class Circle :public Shape
{
public:virtual void Area() { cout << "Ci area" << endl; }virtual void Perimeter() { cout << "Ci per" << endl; }Circle(int r) :m_r(r) {}
private:int m_r;
};
class Rectangle :public Shape
{
public:virtual void Area() { cout << "Re area" << endl; }virtual void Perimeter() { cout << "Re per" << endl; }Rectangle(int l, int w) :m_length(l), m_width(w) {}
private:int m_length;int m_width;
};
void test(Shape& sh)
{sh.Area();sh.Perimeter();
}
int main11()
{//使用抽象类指针创建其子类Shape* p[3];// = { new Rectangle(3,5),new Circle(5),new Triangle(6) };//Shape sh;//err不允许使用抽象类类型int i;p[0] = new Rectangle(2, 4);p[1] = new Circle(5);p[2] = new Triangle(6);for (i = 0; i < 3; ++i){p[i]->Area();p[i]->Perimeter();delete p[i];p[i] = NULL;}return 0;
}

虚析构和纯虚析构

使用多态时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码

此时需要将父类中的析构函数改为虚析构或者纯虚析构。

作用:虚析构和纯虚析构都是用来解决通过父类指针释放子类对象;

如果子类没有堆区数据,可以不写纯虚析构或虚析构;

有纯虚析构的类也属于抽象类;

class Animal
{
public:Animal() { cout << "Animal构造" << endl; }~Animal(){ cout << "Animal析构" << endl; }//纯虚析构_纯虚需要声明也需要定义(代码实现)//virtual ~Animal() = 0;virtual void speak() = 0;
};
//Animal:: ~Animal(){ cout << "Animal纯虚析构" << endl; }//在外面定义
class Cat :public Animal
{
public:Cat(string name){cout << "Cat构造" << endl;m_Name = new string(name);//子类成员在堆区开辟空间}virtual void speak(){cout << *m_Name<<" cat speak" << endl;}~Cat(){cout << "Cat析构" << endl;if (m_Name != NULL)delete m_Name;m_Name = NULL;}string* m_Name;
};
int main()
{Animal* an = new Cat("Mimi");an->speak();//cat speakdelete an;//父类指针析构时不调用子类中的析构,可能发生内存泄漏//父类析构函数不是虚析构时,如果释放指向子类的父类指针,只会调用父类的析构函数//在父类析构函数前面加上virtual关键字就可以解决这个问题
}

不用虚析构的结果:无法调用子类的析构。

在父类析构前加上虚关键字就可以:

http://www.yayakq.cn/news/235570/

相关文章:

  • 洮南网站建设哪家专业页面设计模板简约
  • 外贸网站建设和网站推广要怎么做快递网站制作
  • 族谱网站建设方案如何看到网站做哪些关键字
  • 做网站有未来吗中核工建设集团有限公司网站
  • 做企业网站有哪些好处建设网站怎么到工商备案
  • 网站怎样盗链图片缪斯装饰设计有限公司
  • 博物馆网站建设方案婚纱摄影的网站怎么做
  • 做货代在上面网站找客户比较多网站子域名怎么设置
  • 黄页推广软件网站wordpress外贸主题下载
  • 麦包包网站建设特点软件开发公司深圳
  • 网站制作报价单模板万网账户
  • 网站上线后苏州保洁公司收费价格表
  • 品牌网站设计提案免费手机app制作
  • 美食网站开发的特点与总结怎么上平台卖自己的产品
  • 快速达建网站vps服务器怎么创建多个网站
  • 深圳做微商网站设计免费软件看电视剧
  • wordpress网站设密码广东网站设计哪家好
  • 网站手机版方案主流网站风格
  • wordpress网站响应速度插件昆明市建设局官方网站
  • 网站怎么做留言板块建设部网站官网造价工程师孙思新
  • 法律网站的建设流程好看的静态网站
  • 天津网站排名wordpress主题Cosy
  • 网站建设与网页设计教程网摘网站推广法
  • 嘉兴网站建设企业网站制作建设集团网站的作用
  • 不懂的做网站专门做旅游的视频网站有哪些
  • wap医院网站建设wordpress 嵌入 php代码
  • 外贸建设网站制作深圳黄页企业名录
  • 宁波怎么建网站模板官网网站建设需求
  • 火车头 wordpress 4.9广州seo关键字推广
  • 影楼微网站建设方案建设网站建设公司