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

做网站克隆怎么做团购网站

做网站克隆,怎么做团购网站,中石化网站是哪个公司做的,视频直播类网站开发难度文章目录1.构造函数#xff0c;析构函数可以为虚函数吗#xff1f;2.析构函数和构造函数的作用#xff1f;3.构造函数和析构函数调用顺序#xff1f;4.类什么时候会调用析构函数#xff1f;1.构造函数#xff0c;析构函数可以为虚函数吗#xff1f; 构造函数不可以析构函数可以为虚函数吗2.析构函数和构造函数的作用3.构造函数和析构函数调用顺序4.类什么时候会调用析构函数1.构造函数析构函数可以为虚函数吗 构造函数不可以析构函数可以 从存储空间角度虚函数相应一个指向vtable虚函数表的指针这大家都知道但是这个指向vtable的指针事实上是存储在对象的内存空间的。问题出来了假设构造函数是虚的就须要通过 vtable来调用但是对象还没有实例化也就是内存空间还没有怎么找vtable呢所以构造函数不能是虚函数。 从使用角度虚函数主要用于在信息不全的情况下能使重载的函数得到相应的调用。构造函数本身就是要初始化实例那使用虚函数也没有实际意义呀。所以构造函数没有必要是虚函数。虚函数的作用在于通过父类的指针或者引用来调用它的时候可以变成调用子类的那个成员函数。而构造函数是在创建对象时自己主动调用的不可能通过父类的指针或者引用去调用因此也就规定构造函数不能是虚函数。 构造函数不须要是虚函数也不同意是虚函数由于创建一个对象时我们总是要明白指定对象的类型虽然我们可能通过实验室的基类的指针或引用去訪问它但析构却不一定我们往往通过基类的指针来销毁对象。这时候假设析构函数不是虚函数就不能正确识别对象类型从而不能正确调用析构函数。 从实现上看vbtl在构造函数调用后才建立因而构造函数不可能成为虚函数从实际含义上看在调用构造函数时还不能确定对象的真实类型由于子类会调父类的构造函数并且构造函数的作用是提供初始化在对象生命期仅仅运行一次不是对象的动态行为也没有必要成为虚函数。 当一个构造函数被调用时它做的首要的事情之中的一个是初始化它的VPTR。因此它仅仅能知道它是“当前”类的而全然忽视这个对象后面是否还有继承者。当编译器为这个构造函数产生代码时它是为这个类的构造函数产生代码——既不是为基类也不是为它的派生类由于类不知道谁继承它。所以它使用的VPTR必须是对于这个类的VTABLE。并且仅仅要它是最后的构造函数调用那么在这个对象的生命期内VPTR将保持被初始化为指向这个VTABLE, 但假设接着另一个更晚派生的构造函数被调用这个构造函数又将设置VPTR指向它的 VTABLE等.直到最后的构造函数结束。VPTR的状态是由被最后调用的构造函数确定的。这就是为什么构造函数调用是从基类到更加派生类顺序的还有一个理由。可是当这一系列构造函数调用正发生时每一个构造函数都已经设置VPTR指向它自己的VTABLE。假设函数调用使用虚机制它将仅仅产生通过它自己的VTABLE的调用而不是最后的VTABLE全部构造函数被调用后才会有最后的VTABLE。 因为构造函数本来就是为了明确初始化对象成员才产生的然而virtual function主要是为了再不完全了解细节的情况下也能正确处理对象。另外virtual函数是在不同类型的对象产生不同的动作现在对象还没有产生如何使用virtual函数来完成你想完成的动作。 C中基类采用虚析构函数是为了防止内存泄漏。 具体地说如果派生类中申请了内存空间并在其析构函数中对这些内存空间进行释放。 假设基类中采用的是非虚析构函数当删除基类指针指向的派生类对象时就不会触发动态绑定因而只会调用基类的析构函数而不会调用派生类的析构函数。 那么在这种情况下派生类中申请的空间就得不到释放从而产生内存泄漏。所以为了防止这种情况的发生C中基类的析构函数应采用virtual虚析构函数。 #includeiostream using namespace std;class base { public:base() {}virtual void print() {cout base function endl;}~base() {cout base析构函数 endl;} };class derived :public base{ public:derived(){}virtual void print() {cout derived function endl;}~derived(){cout derived析构函数 endl;} }; int main() {base* ptr new derived;ptr-print();delete ptr;return 0; }derived function base析构函数基类构造函数没有定义为虚函数所以delete ptr只调用了基类的析构函数没有调用派生类的构造函数造成内存泄露。 #includeiostream using namespace std;class base { public:base() {}virtual void print() {cout base function endl;}virtual ~base() {cout base析构函数 endl;} };class derived :public base{ public:derived(){}virtual void print() {cout derived function endl;}~derived(){cout derived析构函数 endl;} }; int main() {base* ptr new derived;ptr-print();delete ptr;return 0; }derived function derived析构函数 base析构函数2.析构函数和构造函数的作用 构造函数只是起初始化值的作用 析构函数与构造函数的作用相反用于撤销对象的一些特殊任务处理可以是释放对象分配的内存空间 析构函数的特点析构函数与构造函数同名但该函数前面加~。 析构函数没有参数也没有返回值而且不能重载在一个类中只能有一个析构函数。 当撤销对象时编译器也会自动调用析构函数。 每一个类必须有一个析构函数用户可以自定义析构函数也可以是编译器自动生成默认的析构函数。一般析构函数定义为类的公有成员。 3.构造函数和析构函数调用顺序 构造函数顺序 ① 基类构造函数。如果有多个基类则构造函数的调用顺序是某类在类派生表中出现的顺序而不是它们在成员初始化表中的顺序。 ② 成员类对象构造函数。如果有多个成员类对象则构造函数的调用顺序是对象在类中被声明的顺序而不是它们出现在成员初始化表中的顺序。 ③ 派生类构造函数。 析构函数顺序 ① 调用派生类的析构函数 ② 调用成员类对象的析构函数 ③ 调用基类的析构函数。 4.类什么时候会调用析构函数 对象生命周期结束被销毁时 delete指向对象的指针时或delete指向对象的基类类型指针而其基类虚构函数是虚函数时 对象i是对象o的成员o的析构函数被调用时对象i的析构函数也被调用。
http://www.pierceye.com/news/407239/

相关文章:

  • 网站怎么加icowordpress 程序员主题
  • 做国外产品描述的网站门户网站 建设 如何写
  • 建筑网站资料哪些购物网站做的比较简洁有品质
  • 永州做网站网站运营与管理实验报告
  • 江门专业网站建设系统黄冈公司网站建设平台
  • 男女做羞羞事的网站衡器行业网站建设模板
  • 怎么看网站空间大小wordpress悬浮代码
  • 淮安市建设监理协会网站家装网站做
  • 深圳专业营销网站建站网站插件
  • 企业网站建设专业精准丨 鸣远科技网站建设会议验收
  • 网站建设在哪里做比较好广东网站设计公司
  • 什么叫域名访问网站六安网络科技有限公司
  • 江苏省城乡与建设厅网站首页文山网站建设兼职
  • 做网站用什么系统好二手商标网
  • 福州网站建设公司哪个好做芯片代理哪个网站推广
  • 怎么制作钓鱼网站链接乐山网站营销推广哪家公司好
  • 一键网站制作定制网站型网站开发
  • 营销型网站开发流程包括辽宁建设工程信息网新网址
  • 宁德企业网站建设网站开发成本包括
  • 茂名建设中专学校网站如何做国际贸易网站
  • 自己办网站网站开发多久
  • wordpress 图表插件网站seo找准隐迅推
  • 欧美网站设计网站制作基础教程
  • wordpress显示icp备案号手机关键词排名优化
  • 网站建设与管理属于什么部门自助建站 知乎
  • 成都网站开发哪个好常州建网站
  • 陕西住房与城乡建设厅网站从化市营销型网站建设
  • 如何在网站上做推广自己做网站的图片
  • 珠海模板网站建设wordpress 底部工具栏
  • 网站建设的业务流程图招聘网站上找在家做