zoukankan      html  css  js  c++  java
  • C++

          今天做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

  • 相关阅读:
    [原创]ASP.NET MVC调用美图秀秀开放平台拼图实现
    使用Lucene检索文档中的关键字
    Unitils+hibernate+Spring+PostgreSql做dao层测试遇到的错误
    初探IronJS
    IntelliJ IDEA 12 创建Web项目 教程 超详细版
    百度面试题:求绝对值最小的数
    jquery+css实现简单的评分功能
    Knockot JS 数字输入插件
    Diagnostic Policy Service 服务处于起不来
    WCF学习笔记(一) 之 开门见山
  • 原文地址:https://www.cnblogs.com/sineatos/p/4081116.html
Copyright © 2011-2022 走看看