zoukankan      html  css  js  c++  java
  • 构造

    #include<iostream>
    
    class Entity
    {
    public:
        float x,y;
        void Print()
        {
            std::cout<<x<<","<<y<<std::endl;
        }
    };
    
    int main()
    {
        Entity e;
        e.Print();
        std::cin.get();
    }

    运行上述代码发现结果如下

     我们得到了两个完全随机的位置信息x,y,这是因为我们实例化Entity这个类并为它分配内存的时候,并没有对内存进行初始化操作,这就意味着内存空间中开始的时候存什么我们就显示什么,我们需要做的是初始化内存然后将xy赋一个0或者其他什么别的初值。

    由于xy是公有的,所以我们也可以在主函数中通过类来打印他

    Entity e;
    std::cout<<e.X<<","<<e.Y<<std::endl;

    如果我们在主函数中做如下修改,那么会发现编译器报错

     在编译过程中出现错误,由于内存没有被初始化,所以编译无法通过,无论以上那两种方式都是我们不想要的打印方法,所以这是就需要一种初始化方法,使我们每次构造Entity类的时候都能够将xy设为0或者其他的初值,所以我们需要在类中创建一个初始化

    class Entity
    {
    public:
        float x,y;
    
        void Init()
        {
            x=0.0f;
            y=0.0f;
        }
    
        void Print()
        {
            std::cout<<x<<","<<y<<std::endl;
        }
    };

    然后再每次新建一个类时都调用这个函数

    Entity e;
    e.Init();

    这时打印出来的xy就都是0了,但是这个Init()函数是我们额外手写出来的代码,每日此我们想要新建一个Entity类的时候我们都需要运行Init()函数,这样会使代码量增加并且一点都不简洁,这时就需要构造。构造函数会在每次类被新建的时候被调用。

    定义方法:就像定义其他函数一样,不过构造函数是没有返回值的,并且它的名字必须和类的名字相同

    class Entity
    {
        float x,y;
    
        Entity()
        {
            x=0.0f;
            y=0.0f;
        }
    
        void Print()
        {
            std::cout<<x<","<<y<<std::endl;
        }
    }; 

    此时运行代码,我们不需要再对Entity类内的xy进行初始化了,初始化任务已经被构造函数完成了。如果不在类内新建构造函数,类中仍会存在默认构造函数,但是这个函数什么都不会做。事实上我们可以写无数多个构造函数,想写多少就写多少,还可以给构造函数加上输入变量

    #include<iostream>
    
    class Entity
    {
        float X,Y;
    
        Entity()
        {}
    
        Entity(float x,float y)
        {
            X=x;
            Y=y;
        }
    
        void Print()
        {
            std::cout<<X<<","<<Y<<std::endl;
        }
    };
    
    int main()
    {
        Entity e(10.0f,5.0f);
        e.Print();
        std::cin.get();
    }

    此时打印的值是10,5

    构造函数只有在新建类时才会调用,如果使用命名空间方法(::)调用类中的静态方法,那么构造函数将不会被调用。如果一个类,他只有静态方法,那么新建这个类的时候将不会调用构造函数,如果调用构造函数也会出错。

  • 相关阅读:
    切换到真正的最高权限 SYSTEM 账户界面
    javascript中replace的正则表达式语法
    微软系统漏洞_超长文件路径打造私人地盘
    JAVA控制台
    PowerPoint绘图笔不能用
    《JavaScript核心技术》
    Catch(...) C++中三个点
    XMLHttp连续调用SEND需要注意的问题
    Wscript中的事件机制
    JavaScript(JS)常用的正则表达式
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/12674687.html
Copyright © 2011-2022 走看看