今天做C++的实验,题目是写一个二维点的类,然后让一个三维点的类继承它然后扩展。题目是一般学面向对象语言的常用例子。

      然后遇到一个这样的问题:之前用Java的时候写构造方法的时候,如果需要用一个构造方法调用同一个类的另一个构造方法,建议我们这样写(以写一个二维点类为例):

/*********** Java *************/
public class Point2D{
private double x;
private double y; public Point2D(){
this(0,0);
} public Point2D(double x,double y){
this.x=x; this.y=y;
} /************getter && setter************/
}

     然后在C++里面无法通过this(0,0)这种方式来来调用Point2D(double x,double y)。

如果你用C++写成这样:

/*********** C++ *************/
class Point2D{ public:
Point2D(){
Point2D::Point2D(0,0);
} Point2D(double x,double y){
this->x=x;
this->y=y;
} /************getter && setter************/ private:
double x;
double y; }

      那么你还是会错,因为在Point2D()这一个构造函数里面,我们做的操作是调用了Point2D(0,0)生成了一个匿名对象,然后什么事都没有干了。所以如果你用Point2D()初始化一个对象以后,检查这个对象的值会发现这个对象的x和y都没有进行任何初始化。

      如果你想像Java那样调用构造函数的话,可以这样写:

/*********** C++ *************/
class Point2D{ public:
Point2D(){
new (this)Point2D::Point2D(0,0);
} Point2D(double x,double y){
this->x=x;
this->y=y;
} /************getter && setter************/ private:
double x;
double y; }

      实际上这种技术有个名字叫placement new,与一般的operator new不一样。解释如下:

      new (pointer)构造函数() 里面,看括号里面的是一个指针整句话的意思就是生成一个对象,然后将对象放在指针指向的地址那里。这种方法可以在任意地方构造对象。

     在网上找到相关的资料:http://stackoverflow.com/questions/22604598/what-does-new-this-mean

最新文章

  1. [转载]windows 7 IIS 7.5 ASP.Net 文件上传大小限制
  2. linux下查看最消耗CPU、内存的进程
  3. ajax实现上传文件
  4. 在Linux上配置xampp后远程访问域名报错
  5. jquery中使用event.target的几点
  6. java异常 总结
  7. mysql及php命名规范
  8. [转] iOS开发之使用lipo命令制作模拟器与真机通用静态库
  9. CentOS 7 ibus 导入第三方词库
  10. Openfire 服务端在Eclipse上部署
  11. [JS代码]如何判断ipad或者iphone是否为横屏或者竖屏 - portrait或者landscape
  12. 01-C语言基本知识
  13. 【转】C++常见错误大全
  14. C++ 头文件系列(istream)
  15. 201521123100 《Java程序设计》第4周学习总结
  16. Oracle 中sql文件的导入导出
  17. [报错]Could not get a resource from the pool
  18. Vue todolist练习 知识点
  19. numpy之random学习
  20. 解决virtualbox与mac文件拖拽问题

热门文章

  1. bzoj 1782: [Usaco2010 Feb]slowdown 慢慢游【dfs序+线段树】
  2. P2476 [SCOI2008]着色方案
  3. ASP.NET MVC 导出CSV文件
  4. 使用wkwebview后,页面返回不刷新的问题
  5. Android4.4以上Uri转换成绝对路径的工具类
  6. [ CodeForces 515 D ] Drazil and Tiles
  7. Git——基本操作
  8. Java 8 和 Java 9部分区别
  9. 网站卡测试用 PageSpeed Insights
  10. 梦想CAD控件网页版文字样式