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

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

  • 相关阅读:
    Photoshop 基础七 位图 矢量图 栅格化
    Photoshop 基础六 图层
    Warfare And Logistics UVALive
    Walk Through the Forest UVA
    Airport Express UVA
    Guess UVALive
    Play on Words UVA
    The Necklace UVA
    Food Delivery ZOJ
    Brackets Sequence POJ
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/12674687.html
Copyright © 2011-2022 走看看