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

电子商务网站建设实训展示网上做调查问卷的网站

电子商务网站建设实训展示,网上做调查问卷的网站,塘厦企业网站推广公司,建设银行网站查询业务收费吗一、多态的概念 1.1概念: 通俗来说#xff0c;就是多种形态#xff0c;具体点就是去完成某个行为#xff0c;当不同的对象去完成时会产生出不同的状态。 二、 多态的定义及实现 2.1多态的构成条件 多态是在不同继承关系的类对象#xff0c;去调用同一函数#xff0c;产…一、多态的概念 1.1概念: 通俗来说就是多种形态具体点就是去完成某个行为当不同的对象去完成时会产生出不同的状态。 二、 多态的定义及实现 2.1多态的构成条件 多态是在不同继承关系的类对象去调用同一函数产生了不同的行为。比如Student继承了Person。Person对象买票全价Student对象买票半价。 在继承中要多态还要两个条件 父类指针或引用去调用虚函数这样才能保证传父类对象调用的就是父类的虚函数传子类对象调用的是子类的虚函数调用子类传子类利用切片的原理虚函数完成重写父子类中的两个虚函数三同函数名、参数、返回值这样父子类的两个虚函数才能构成重写 可以将重写理解为隐藏的子集因为隐藏仅要求函数名相同 2.2虚函数 虚函数即被virtual修饰的类成员函数称为虚函数。 class Person { public:virtual void BuyTicket() { cout 买票-全价 endl;} }; 2.3虚函数的重写 虚函数的重写(覆盖)派生类中有一个跟基类完全相同的虚函数(即派生类虚函数与基类虚函数的返回值类型、函数名字、参数列表完全相同)称子类的虚函数重写了基类的虚函数。 class Person { public:virtual void BuyTicket() { cout 买票-全价 endl; } }; class Student : public Person { public:virtual void BuyTicket() { cout 买票-半价 endl; } /*注意在重写基类虚函数时派生类的虚函数在不加virtual关键字时虽然也可以构成重写(因 为继承后基类的虚函数被继承下来了在派生类依旧保持虚函数属性),但是该种写法不是很规范不建议这样使用*/ /*void BuyTicket() { cout 买票-半价 endl; }*/ }; void Func(Person p) { p.BuyTicket(); }2.4虚函数重写的两个例外 1. 协变(基类与派生类虚函数返回值类型不同)了解 不重要 协变虚函数返回值可以不同返回值要求必须是父子类关系的指针或者引用。 class A{}; class B : public A {}; class Person { public:virtual A* f() {return new A;} }; class Student : public Person { public:virtual B* f() {return new B;} }; 2. 析构函数的重写(基类与派生类析构函数的名字不同) 普通调用看指针或者引用或者对象的类型 多态调用看指针或者引用指向的对象 我们希望上面的特殊情况是多态调用如果是普通调用会造成内存泄漏student对象没有析构如下图。 所以我们如何才能变成多态调用呢 在子类和基类的析构函数都加上virtual构成重写变为多态调用。那这里违反重写的规则函数名都不相同怎么能构成重写呢 答 虽然函数名不相同看起来违背了重写的规则其实不然这里可以理解为编译器对析构函数的名称做了特殊处理编译后析构函数的名称统一处理成destructor TIP特殊情况 如果基类的析构函数为虚函数此时派生类析构函数只要定义无论是否加virtual关键字都与基类的析构函数构成重写。 2.5、关于父类子类virtual加与不加 虚函数重写时父类虚函数加了virtual子类不加也构成重写但是如果父类不加virtual就不构成重写。 建议两个虚函数都加上virtual 2.6 C11 override 和 final final 关键字的两个作用 其一是final修饰的类是最终类不能被继承 注意实现一个类这个类不能被继承还有一种方法让父类构造函数私有化派生类实例化不出对象。 其二是修饰虚函数表示该虚函数不能再被重写 override: 检查派生类虚函数是否重写了基类某个虚函数如果没有重写编译就会报错。 2.7重载、覆盖重写、隐藏重定义的对比 重载 两个函数在同一作用域函数名相同参数不同 重写覆盖 两个函数分别在基类和派生类的作用域函数名/参数/返回值都必须相同协变例外两个函数都必须是虚函数 重定义隐藏 两个函数分别在基类和派生类的作用域函数名相同两个基类和派生类的同名函数不构成重写就是重定义 四、多态的原理 4.1虚函数表 先做一道笔试题 // 这里常考一道笔试题sizeof(Base)是多少 class Base { public:virtual void Func1(){cout Func1() endl;} private:int _b 1; }; 通过观察测试我们发现b对象是8bytes。 除了_b成员还多一个__vfptr指针也就是虚函数表指针这个表本质上是一个函数指针的数组 vfptr是存放函数指针的数组就是将虚函数的指针存进去。 虚函数的重写也叫做覆盖重写是语法层的概念覆盖是原理层的概念。 形象的记忆 比如上图子类将父类的拷贝过来然后虚表重写的部分将原先父类虚表的部分进行一个覆盖。 具体如何实现多态调用和普通调用 多态调用 运行时去虚函数表中找函数的地址进行调用所以指向父类调用的是父类虚函数指向子类调用的是子类虚函数。 普通调用 编译时通过调用者类型确定函数地址。 面试题解析 解析 首先我们看到B继承A那么B里面的func函数和A里面的func函数构不构成重写呢 函数名相同返回值相同参数类型相同注意看参数是否相同就是看类型与变量名、缺省值无关并且父类是虚函数所以构成重写 接着我们看到p-test()直接调用到了父类test()里面的func()函数那么这里this指针是A* or B*呢因为此时的test()是在父类因此是A*如果是B*子类那就不满足多态的条件必须是父类所以不满足多态所以这里的func函数构成了多态因此是多态调用所以是指针/引用指向的类型因此调用B里面的func函数所以答案是D嘛 但真正的答案是B。 原因是多态调用重写是实现重写会将父类的函数声明与子类进行组合因此val的值就是父类的1因此答案是B 下面因为是子类的调用不构成多态因此答案全都是D
http://www.eeditor.cn/news/121031/

相关文章:

  • 国家排污许可网站台账怎么做重庆网站营销案例
  • 个人站长做电音网站专业的上海网站建设公司排名
  • wordpress付费关键词优化一年多少钱
  • 安平县网站建设wordpress 下载站主题
  • 简述网站开发的具体流程有域名怎么建网站南宁
  • 网站设计一般用什么软件西安网红
  • 天猫网站建设的目标vue做的网站域名汇总
  • 计算机毕设做网站专业手机网站建设价格明细表
  • 成都网站建设哪家好用wordpress
  • 如何做响应式布局网站淘宝客自建网站做还是用微信qq做
  • 网站可以换主机吗用什么做flash游戏下载网站
  • 电脑网站转手机版三盛都会城网站 html5
  • 如何建设像艺龙一样网站网站模板如何编辑软件
  • 网站怎么做落款wordpress手机版如何在电脑
  • 建设项目自主验收公示网站资金盘网站怎么建设
  • 广州做内销鞋的网站网站建设电商
  • 南京页面网站制作小贷做网站
  • 网站的建设部署与发布创意新颖的产品设计
  • 全球知名购物网站有哪些wordpress the7 慢
  • 陇西哪里能学做网站云建站app
  • 有什么网站可以做家教100种禁用的视频软件不要钱
  • 申请建设单位门户网站的请示360建筑网介绍
  • 网站建设歺金手指排名13自己的网站如何做推广
  • 私人彩票网站做几年牢建网站商城
  • 惠州网站建设乐云seo在线制作做百度移动端网站
  • 网站有风险提示怎么办手表网站大全
  • 专业做传奇网站解析点击网络网站
  • 手机html5 网站导航代码漳州市城乡建设局网站
  • 沈阳做网站优化的公司团员电子档案查询系统
  • 东莞室内设计培训seo 资料包怎么获得