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

电商网站设计公司立找亿企邦太原企业网站制作

电商网站设计公司立找亿企邦,太原企业网站制作,品牌词优化,大连仟亿科技网站建设公司 概况基类的指针(Pointers to base class) 继承的好处之一是一个指向子类(derived class)的指针与一个指向基类(base class)的指针是type-compatible的。 本节就是重点介绍如何利用C的这一重要特性。例如#xff0c;我们将结合C的这个功能#xff0c;重写前面小节中关于长方形rect… 基类的指针(Pointers to base class) 继承的好处之一是一个指向子类(derived class)的指针与一个指向基类(base class)的指针是type-compatible的。 本节就是重点介绍如何利用C的这一重要特性。例如我们将结合C的这个功能重写前面小节中关于长方形rectangle 和三角形 triangle 的程序 // pointers to base class #include iostream.h class CPolygon { protected:int width, height; public:void set_values (int a, int b) {widtha; heightb;} }; class CRectangle: public CPolygon { public:int area (void) {return (width * height);} }; class CTriangle: public CPolygon { public:int area (void) {return (width * height / 2);} }; int main () {CRectangle rect;CTriangle trgl;CPolygon * ppoly1 rect;CPolygon * ppoly2 trgl;ppoly1-set_values (4,5);ppoly2-set_values (4,5);cout rect.area() endl;cout trgl.area() endl;return 0; } 20 10 在主函数 main 中定义了两个指向class CPolygon的对象的指针即 *ppoly1 和 *ppoly2。 它们被赋值为rect 和 trgl的地址因为rect 和 trgl是CPolygon 的子类的对象因此这种赋值是有效的。 使用*ppoly1 和 *ppoly2 取代rect 和trgl 的唯一限制是*ppoly1 和 *ppoly2 是CPolygon* 类型的因此我们只能够引用CRectangle 和 CTriangle 从基类CPolygon中继承的成员。正是由于这个原因我们不能够使用*ppoly1 和 *ppoly2 来调用成员函数 area()而只能使用rect 和 trgl来调用这个函数。 要想使CPolygon 的指针承认area()为合法成员函数必须在基类中声明它而不能只在子类进行声明(见下一小节)。 虚拟成员(Virtual members) 如果想在基类中定义一个成员留待子类中进行细化我们必须在它前面加关键字virtual 以便可以使用指针对指向相应的对象进行操作。 请看一下例子 // virtual members #include iostream.h class CPolygon {protected:int width, height;public:void set_values (int a, int b) {widtha;heightb;}virtual int area (void) { return (0); } }; class CRectangle: public CPolygon {public:int area (void) { return (width * height); } }; class CTriangle: public CPolygon {public:int area (void) {return (width * height / 2);} }; int main () {CRectangle rect;CTriangle trgl;CPolygon poly;CPolygon * ppoly1 rect;CPolygon * ppoly2 trgl;CPolygon * ppoly3 poly;ppoly1-set_values (4,5);ppoly2-set_values (4,5);ppoly3-set_values (4,5);cout ppoly1-area() endl;cout ppoly2-area() endl;cout ppoly3-area() endl;return 0; } 20 10 0 现在这三个类(CPolygon, CRectangle 和 CTriangle) 都有同样的成员width, height, set_values() 和 area()。 area() 被定义为virtual 是因为它后来在子类中被细化了。你可以做一个试验如果在代码种去掉这个关键字(virtual)然后再执行这个程序三个多边形的面积计算结果都将是 0 而不是20,10,0。这是因为没有了关键字virtual 程序执行不再根据实际对象的不用而调用相应area() 函数(即分别为CRectangle::area(), CTriangle::area() 和 CPolygon::area())取而代之程序将全部调用CPolygon::area()因为这些调用是通过CPolygon类型的指针进行的。 因此关键字virtual 的作用就是在当使用基类的指针的时候使子类中与基类同名的成员在适当的时候被调用如前面例子中所示。 注意虽然本身被定义为虚拟类型我们还是可以声明一个CPolygon 类型的对象并调用它的area() 函数它将返回0 如前面例子结果所示。 抽象基类(Abstract base classes) 基本的抽象类与我们前面例子中的类CPolygon 非常相似唯一的区别是在我们前面的例子中我们已经为类CPolygon的对象例如对象poly定义了一个有效地area()函数而在一个抽象类abstract base class中我们可以对它不定义而简单得在函数声明后面写 0 (等于0)。 类CPolygon 可以写成这样 // abstract class CPolygon class CPolygon {protected:int width, height;public:void set_values (int a, int b) {widtha;heightb;}virtual int area (void) 0; }; 注意我们是如何在virtual int area (void)加 0 来代替函数的具体实现的。这种函数被称为纯虚拟函数pure virtual function而所有包含纯虚拟函数的类被称为抽象基类(abstract base classes)。 抽象基类的最大不同是它不能够有实例(对象)但我们可以定义指向它的指针。因此像这样的声明 CPolygon poly; 对于前面定义的抽象基类是不合法的。 然而指针 CPolygon * ppoly1; CPolygon * ppoly2 是完全合法的。这是因为该类包含的纯虚拟函数(pure virtual function) 是没有被实现的而又不可能生成一个不包含它的所有成员定义的对象。然而因为这个函数在其子类中被完整的定义了所以生成一个指向其子类的对象的指针是完全合法的。 下面是完整的例子 // virtual members #include iostream.h class CPolygon {protected:int width, height;public:void set_values (int a, int b) {widtha;heightb;}virtual int area (void) 0; }; class CRectangle: public CPolygon {public:int area (void) { return (width * height); } }; class CTriangle: public CPolygon {public:int area (void) {return (width * height / 2);} }; int main () {CRectangle rect;CTriangle trgl;CPolygon * ppoly1 rect;CPolygon * ppoly2 trgl;ppoly1-set_values (4,5);ppoly2-set_values (4,5);cout ppoly1-area() endl;cout ppoly2-area() endl;return 0; } 20 10 再看一遍这段程序你会发现我们可以用同一种类型的指针(CPolygon*)指向不同类的对象至一点非常有用。 想象一下现在我们可以写一个CPolygon 的成员函数使得它可以将函数area()的结果打印到屏幕上而不必考虑具体是为哪一个子类。 // virtual members #include iostream.h class CPolygon {protected:int width, height;public:void set_values (int a, int b) {widtha;heightb;}virtual int area (void) 0;void printarea (void) {cout this-area() endl;} }; class CRectangle: public CPolygon {public:int area (void) { return (width * height); } }; class CTriangle: public CPolygon {public:int area (void) {return (width * height / 2);} }; int main () {CRectangle rect;CTriangle trgl;CPolygon * ppoly1 rect;CPolygon * ppoly2 trgl;ppoly1-set_values (4,5);ppoly2-set_values (4,5);ppoly1-printarea();ppoly2-printarea();return 0; } 20 10 记住this 代表代码正在被执行的这一个对象的指针。 抽象类和虚拟成员赋予了C 多态(polymorphic)的特征使得面向对象的编程object-oriented programming成为一个有用的工具。这里只是展示了这些功能最简单的用途。想象一下如果在对象数组或动态分配的对象上使用这些功能将会节省多少麻烦
http://wiki.neutronadmin.com/news/349324/

相关文章:

  • 网站管理和维护的主要工作有哪些班级网站建设活动方案
  • 网站百度推广怎么做代理网址在线
  • 湛江高端网站建设福州seo网站推广优化
  • 自己电脑做的网站如何映射到公网做logo赚钱的网站
  • 常州网站推广软件厂家网址收录入口
  • 好多公司为啥只做网站 不考虑推广app开发定制软件公司
  • 微网站建设公司家用宽带做网站服务器
  • 网站开发费属于无形资产wordpress个人站无法升级
  • 中国icp备案的有多少企业网站动漫制作专业认知
  • 聊城手机网站建设方案怎么在windows做网站
  • 网站排名优化软件电话WordPress里面备份功能在哪
  • vs做网站标签输出语言单位网站的建设
  • 厦门自己建网站购买域名做销售网站可以吗
  • 怎么创建一个自己的网站网站售价
  • 新乡个人网站建设价格在线涨粉平台
  • 网站首页布局诊断网页qq网址
  • 枣阳网站开发做全世界的生意的网站
  • 门户网站建设投资天津市建设公司网站
  • 大型网站技术架构演进与性能优化求一外国h网站
  • 流行的网站设计风格成都锦江建设局网站
  • 工商局网站官网页面设计公司会招低学历的人吗
  • 秦皇岛网站开发价格做车展的网站
  • 分销怎么做网站开发分销丝绸之路网站建设策划书
  • 在哪公司建设网站新手运营从哪开始学
  • 做视频网站审核编辑有假么个人如何做购物网站 关于支付接口
  • 像饿了码的网站建站有吗wordpress主题 榆次
  • 网站挣钱网深圳百度快照优化
  • 河南网站优化排名内网门户网站建设
  • 小型门户网站建设硬件配置手机网价格直降
  • 彩妆网站建设策划书住房与建设部网站首页