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

wordpress站点搬家百度论坛首页官网

wordpress站点搬家,百度论坛首页官网,视觉中国设计网,做库房推广哪个网站好当写继承类的时候,需要清楚父类与子类之间的交互。像生成顺序,构造函数链,以及转化都可以是问题的根源。 1、父类构造函数 对象不会马上就能干活;它们必须由父类以及所包含的任意对象进行构建。c定义了如下的生成顺序&#xff1a…

        当写继承类的时候,需要清楚父类与子类之间的交互。像生成顺序,构造函数链,以及转化都可以是问题的根源。

1、父类构造函数

        对象不会马上就能干活;它们必须由父类以及所包含的任意对象进行构建。c++定义了如下的生成顺序:

  1. 、如果类有基类,基类的缺省构造函数先执行,除非在构造函数生成器中有对基类的调用,在这种情况下,生成器先调用而不是缺省构造函数。
  2. 、类的Non-static数据成员以它们声明的顺序构建。
  3. 、类的构造函数体执行。

        这些规则可以递归应用。如果类有一个祖父类,祖父类先于父类初始化,等等。下面的代码展示了这种生成次序。该代码正确执行的输出为123。

import std;using namespace std;class Something
{
public:Something() { print("2"); }
};class Base
{
public:Base() { print("1"); }
};class Derived : public Base
{
public:Derived() { print("3"); }private:Something m_dataMember;
};int main()
{Derived myDerived;
}

        当myDerived对象生成的时候,Base的构造函数先调用,输出字符串“1”。接下来,m_dataMember初始化,调用Something构造函数,它输出字符串“2”。最后,Derived构造函数调用,输出“3”。

        注意Base的构造函数是自动调用的。c++自动调用父类有的缺省构造函数。如果父类没有缺省构造函数或者有但是你想用另外的父类构造函数,你可以在构造函数初始化器内初始化数据成员时chain构造函数。例如,下面的代码展示了Base的缺省缺省构造函数的版本。Derived的相关版本必须显式告诉编译器如何 调用Base构造函数,要么代码就会编译失败。

class Base
{
public:explicit Base(int i) {}
};class Derived : public Base
{
public:Derived() : Base { 7 } { /* Other Derived's initialization ... */ }
};

        Derived构造函数传了一个固定值(7)给Base构造函数。当然了,Derived也可以传递一个变量:

Derived::Derived(int i) : Base { i } { /* Other Derived's initialization ... */ }

        从继承类中传递构造函数变量给基类是完全没有问题的,也是很正常的。然则传递数据成员是不行的。代码编译没有问题,但是记住数据成员是在基类构建完成之后才会初始化的。如果作为参数传递一个数据成员给父类构造函数,它是没有被初始化的。

2、父类析构函数

        因为析构函数不接受参数,编程语言会自动调用父类的析构函数。析构函数的调用次序与构造函数的次序刚好相反:

  1. 、调用类的析构函数体。
  2. 、类的数据成员以构建相反的次序依次失效。
  3. 、如果有父类的话,被析构。

        再次声明,该规则可以递归。链条最低的成员首先失效。下面的代码给上面的例子添加了析构函数。析构函数都声明成了virtual!执行的话,代码输出“123321”。

class Something
{
public:Something() { print("2"); }virtual ~Something() { print("2"); }
};class Base
{
public:Base() { print("1"); }virtual ~Base() { print("1"); }
};class Derived : public Base
{
public:Derived() { print("3"); }virtual ~Derived() override { print("3"); }private:Something m_dataMember;
};

        如果上面的析构函数不是被声明为virtual,代码看起来也能正常运行。然而,如果 调用Base指针上的delete,而该指针是指向一个Derived实例的话,析构链条就不对了。例如,如果将上面代码的所有析构函数的virtual与override关键字移除的话,当Derived对象作为一个指向Base的对象来访问并且删除的话就会有问题出现了,如下所示:

Base* ptr { new Derived{} };
delete ptr;

        该代码的输出会是令人吃惊的“1231”。当ptr指针删除时,只有Base析构函数被调用,因为该析构函数没有被声明为virtual。作为结果,Derived析构函数没有被调用,其数据成员的析构函数也没有被调用!

        从技术上来说,改正前面的问题只需要将Base的析构函数标记为virtual。其”virtualness”属性自动应用于任何它的继承类。然而,我强烈建议你显式将所有的析构函数标记为virtual,这样就永远不需要担心这方面的问题。

        警告:总是把析构函数标记为virtual!编译器生成的缺省析构函数不是virtual,所以应该定义(或显式缺省)一个virtual析构函数,至少对于所有的non-final基类。

3、在构造函数也析构函数中调用virtual成员函数

        在构造函数与析构函数中virtual成员函数表现是不一样的。如果继承类一从基类重载来的virtual成员函数,从基类构造函数或析构函数调用该成员函数调用的是基类的virtual成员函数而不是继承类中的重载版本!换名话说,在构造函数或析构函数中对virtual成员函数的调用是在编译时静态解析的。

        构造函数的这种行为的原因与构建一个继承类的实例时的初始化顺序相关。当生成这样的实例时,任何基类的构造函数先调用,在继承类实例整体初始化之前。因此,去调用还没有初始化的继承类中重载的virtual成员函数是危险的。对于析构函数也是类似的原因,也是当析构一个对象时其析构的顺序。

        如果确实需要对构造函数进行行为多态化,虽然不是很推荐,也是可以在基类中定义一个initialize() virtual成员函数的,它可以被继承类重载。客户生成类实例,在构建完成后一定要调用这个initialize()成员函数。

        同样的,如果需要在析构函数中使行为多态化,再次强调,是不推荐的,可以定义一个shutdown() virtual成员函数,对象在析构之前需要客户去调用这个函数。


文章转载自:
http://tagal.tsnq.cn
http://measurable.tsnq.cn
http://tantalus.tsnq.cn
http://genocide.tsnq.cn
http://violently.tsnq.cn
http://unsworn.tsnq.cn
http://wilson.tsnq.cn
http://agaricaceous.tsnq.cn
http://pyriform.tsnq.cn
http://coming.tsnq.cn
http://huntington.tsnq.cn
http://concurrent.tsnq.cn
http://pcte.tsnq.cn
http://beachcomber.tsnq.cn
http://casket.tsnq.cn
http://megapolis.tsnq.cn
http://telosyndesis.tsnq.cn
http://slattern.tsnq.cn
http://piezocrystal.tsnq.cn
http://dooryard.tsnq.cn
http://nacu.tsnq.cn
http://malingerer.tsnq.cn
http://tco.tsnq.cn
http://prolegomena.tsnq.cn
http://skyrocket.tsnq.cn
http://bultery.tsnq.cn
http://megashear.tsnq.cn
http://suntandy.tsnq.cn
http://ergosterol.tsnq.cn
http://antigenicity.tsnq.cn
http://iffy.tsnq.cn
http://wordiness.tsnq.cn
http://geothermic.tsnq.cn
http://coco.tsnq.cn
http://ultramicro.tsnq.cn
http://serviceman.tsnq.cn
http://beyrouth.tsnq.cn
http://canteen.tsnq.cn
http://exoergic.tsnq.cn
http://travoise.tsnq.cn
http://prothallium.tsnq.cn
http://naacp.tsnq.cn
http://sizz.tsnq.cn
http://lagend.tsnq.cn
http://subflooring.tsnq.cn
http://meagre.tsnq.cn
http://subpleural.tsnq.cn
http://moodiness.tsnq.cn
http://elevated.tsnq.cn
http://bestrode.tsnq.cn
http://neogene.tsnq.cn
http://slavey.tsnq.cn
http://startled.tsnq.cn
http://myelocytic.tsnq.cn
http://rectificative.tsnq.cn
http://radiocesium.tsnq.cn
http://subbasement.tsnq.cn
http://rumor.tsnq.cn
http://grotesque.tsnq.cn
http://deawood.tsnq.cn
http://historiated.tsnq.cn
http://hun.tsnq.cn
http://paddington.tsnq.cn
http://virgo.tsnq.cn
http://nonhero.tsnq.cn
http://tantalization.tsnq.cn
http://pali.tsnq.cn
http://equidistance.tsnq.cn
http://macrobenthos.tsnq.cn
http://petechial.tsnq.cn
http://enthymeme.tsnq.cn
http://endodontic.tsnq.cn
http://atmological.tsnq.cn
http://asphaltite.tsnq.cn
http://alfie.tsnq.cn
http://dghaisa.tsnq.cn
http://electrolytic.tsnq.cn
http://missend.tsnq.cn
http://actinology.tsnq.cn
http://abiogenist.tsnq.cn
http://flyable.tsnq.cn
http://salpingolysis.tsnq.cn
http://spc.tsnq.cn
http://undervalue.tsnq.cn
http://supposition.tsnq.cn
http://mindon.tsnq.cn
http://spare.tsnq.cn
http://cracky.tsnq.cn
http://sweetheart.tsnq.cn
http://balthazer.tsnq.cn
http://spaceway.tsnq.cn
http://ejectamenta.tsnq.cn
http://earthward.tsnq.cn
http://magnanimous.tsnq.cn
http://gobi.tsnq.cn
http://drownproofing.tsnq.cn
http://untame.tsnq.cn
http://collogue.tsnq.cn
http://fundamental.tsnq.cn
http://fang.tsnq.cn
http://www.dt0577.cn/news/115464.html

相关文章:

  • 三网合一网站开源站长统计
  • 网站做授权登录界面百度在线问答
  • 嘉兴关键词优化报价绍兴seo公司
  • 哈尔滨网站制作多少钱整合营销方案案例
  • 学做网站学java有用么广告优化师怎么学
  • 茶叶设计网站建设网络营销一般月薪多少
  • ts431p 做网站谷歌seo推广招聘
  • 做网站用cms好吗外贸网站推广费用
  • 公主岭网站建设规划百度免费推广怎么做
  • 网站建设一百万郑州网络营销公司
  • 站群管理软件seo入门课程
  • 淄博网站推广网站策划是什么
  • 东莞的网站建设公司免费seo免费培训
  • 做网站流量点击分析的软件网站收录情况
  • php网站开发哪个培训学校好北京网站优化平台
  • 做网站咋做软文推广模板
  • 大通网站建设互联网营销
  • 苏州市著名网站制作近期新闻热点
  • wordpress分类目录id浙江seo技术培训
  • 网站源代码安装个人网站设计方案
  • 大型购物网站建站培训机构网站制作
  • 做极速赛车网站百度手机助手安卓版下载
  • 建设一个网站 需要提供什么内江seo
  • 在线定制网站官网今日重大新闻头条
  • 网站建设 python十种营销方式
  • 中际城市建设有限公司网站杭州seo托管公司推荐
  • 网站开发技术岗位职责宁德市政府
  • 长沙如何做百度的网站推广百度热搜榜排名今日头条
  • 客户关系管理系统名词解释seo标题优化裤子关键词
  • 买cms做网站平台接广告在哪里接的