Chinaunix

标题: NM的C++,基类指针指向派生类时指针概念已经与C语言的有很大不同,但你还用“->” [打印本页]

作者: 边学CPP边骂CPP    时间: 2012-10-18 10:16
标题: NM的C++,基类指针指向派生类时指针概念已经与C语言的有很大不同,但你还用“->”
本帖最后由 边学CPP边骂CPP 于 2012-10-18 12:11 编辑

操NM的C++,基类指针指向派生类时指针概念已经与C语言的有很大不同,但你还用“->”,你他妈的就不能换个符号!

在C语言里如果一个指针成功(编译通过)指向一个实例后,就可以用这个指针完全操作这个实例,用的是“->”符号,直观明了。
但是在C++里,他妈的当用基类指针指向派生类后,这个指针还不能完全操作这个派生类对象(他妈的,老子当然知道这是为了实现多态,不用跟我解释这个)。但是,他妈的既然你这时的指针概念已经与C语言的指针概念有很大不同了,你就别用“->”操作符了,但是你还用“->”,还得让程序员别着弯地去想你的指针的不同,你他妈的就不能换一个别的符号,比如“->>”(他妈的还需要老子帮你举例)。
作者: 边学CPP边骂CPP    时间: 2012-10-18 10:27
他妈的,C++就是个垃圾语言!
作者: zhujiang73    时间: 2012-10-18 10:33
回复 1# 边学CPP边骂CPP


    以后这么写比较好。

  1. public class Shape
  2. {
  3.     // A few example members
  4.     public int X { get; private set; }
  5.     public int Y { get; private set; }
  6.     public int Height { get; set; }
  7.     public int Width { get; set; }

  8.     // Virtual method
  9.     public virtual void Draw()
  10.     {
  11.         Console.WriteLine("Performing base class drawing tasks");
  12.     }
  13. }

  14. class Circle : Shape
  15. {
  16.     public override void Draw()
  17.     {
  18.         // Code to draw a circle...
  19.         Console.WriteLine("Drawing a circle");
  20.         base.Draw();
  21.     }
  22. }
  23. class Rectangle : Shape
  24. {
  25.     public override void Draw()
  26.     {
  27.         // Code to draw a rectangle...
  28.         Console.WriteLine("Drawing a rectangle");
  29.         base.Draw();
  30.     }
  31. }
  32. class Triangle : Shape
  33. {
  34.     public override void Draw()
  35.     {
  36.         // Code to draw a triangle...
  37.         Console.WriteLine("Drawing a triangle");
  38.         base.Draw();
  39.     }
  40. }

  41. class Program
  42. {
  43.     static void Main(string[] args)
  44.     {
  45.         // Polymorphism at work #1: a Rectangle, Triangle and Circle
  46.         // can all be used whereever a Shape is expected. No cast is
  47.         // required because an implicit conversion exists from a derived
  48.         // class to its base class.
  49.         System.Collections.Generic.List<Shape> shapes = new System.Collections.Generic.List<Shape>();
  50.         shapes.Add(new Rectangle());
  51.         shapes.Add(new Triangle());
  52.         shapes.Add(new Circle());

  53.         // Polymorphism at work #2: the virtual method Draw is
  54.         // invoked on each of the derived classes, not the base class.
  55.         foreach (Shape s in shapes)
  56.         {
  57.             s.Draw();
  58.         }

  59.         // Keep the console open in debug mode.
  60.         Console.WriteLine("Press any key to exit.");
  61.         Console.ReadKey();
  62.     }

  63. }

  64. /* Output:
  65.     Drawing a rectangle
  66.     Performing base class drawing tasks
  67.     Drawing a triangle
  68.     Performing base class drawing tasks
  69.     Drawing a circle
  70.     Performing base class drawing tasks
  71. */
复制代码

作者: 边学CPP边骂CPP    时间: 2012-10-18 10:48
回复 3# zhujiang73


    赞同我的看法就表个态,别拐弯抹角的
作者: zhujiang73    时间: 2012-10-18 10:57
边学CPP边骂CPP 发表于 2012-10-18 10:48
回复 3# zhujiang73



       CU 最近人气不高,我是来扇风的。
作者: 边学CPP边骂CPP    时间: 2012-10-18 11:01
谁能说服我对C++的这个质问,我以后就不再骂C++了。
作者: littledick    时间: 2012-10-18 11:02
zhujiang73 发表于 2012-10-18 10:33
回复 1# 边学CPP边骂CPP


这很像爪蛙的写法么{:3_185:}
西卡西,就算用爪蛙写,行为函数只会写在Interface里,而不是class里。

  1. public class Shape
  2. {
  3.     // A few example members
  4.     public int X { get; private set; }
  5.     public int Y { get; private set; }
  6.     public int Height { get; set; }
  7.     public int Width { get; set; }

  8. }
  9. Interface ShapeMethods
  10. {
  11.     public void Draw();
  12. }

  13. public class Circle : Extends Shape Implments ShapeMethods
  14. {
  15.     public void Draw()
  16.     {
  17.         // Code to draw a circle...
  18.         Console.WriteLine("Drawing a circle");
  19.         base.Draw();
  20.     }
  21. }
  22. ...
复制代码
3年没用爪蛙了,有点生疏。
作者: zhujiang73    时间: 2012-10-18 11:05
边学CPP边骂CPP 发表于 2012-10-18 11:01
谁能说服我对C++的这个质问,我以后就不再骂C++了。



    就像法庭上律师辩论,您可以举证质证,骂大街是不好的。  
作者: 边学CPP边骂CPP    时间: 2012-10-18 11:10
这些天我列举出C++很多不合理的地方,让大家对C++的真面目有了清晰正确的认识。
作者: zhujiang73    时间: 2012-10-18 11:19
边学CPP边骂CPP 发表于 2012-10-18 11:10
这些天我列举出C++很多不合理的地方,让大家对C++的真面目有了清晰正确的认识。




      和(游戏里的) AK47 一样,连发不好控制,短点射,少用复杂特性。

      
作者: 边学CPP边骂CPP    时间: 2012-10-18 16:13
回复 10# zhujiang73


用基类指针指向派生类对象是C++的基本特性,只是C++实现这种特性的方式很蹩脚。
作者: littledick    时间: 2012-10-18 17:24
白马非马。
作者: aaxron    时间: 2012-10-19 18:05
本帖最后由 aaxron 于 2012-10-19 18:09 编辑

只有你这种无知的SB,才天天喷C++,C++的历史也许比你还长.
C++有缺点也正常,其实C也有一大堆陷阱.但这是历史遗留问题.
有天生完美的语言?你找出来?


难道C++不是ISO标准?
难道C++委员会的人都是SB,就你聪明,

说白了,你就一SB.






强悍的C++不需要解释.
C++ 你爱用不用.








欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2