this指针和构造函数-创新互联

构造函数:

网站设计、成都网站设计服务团队是一支充满着热情的团队,执着、敏锐、追求更好,是创新互联的标准与要求,同时竭诚为客户提供服务是我们的理念。创新互联建站把每个网站当做一个产品来开发,精雕细琢,追求一名工匠心中的细致,我们更用心!

 特性:

1.构造函数的命名必须和类名完全相同;在java中普通函数可以和构造函数同名,但是必须带有返回值。

2.构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。而其他方法都有返回值,即使是void返回值。尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的。

3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的。

4.当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略。

5.当一个类只定义了私有的构造函数,将无法通过new关键字来创建其对象,当一个类没有定义任何构造函数,编译器会为其自动生成一个默认的无参的构造函数。

作用:

  1. 构建对象

  2. 初始化对象

  3. 类型转换

    构造函数定义格式为:

    class <类名>

    {

    public:

    <类名>(参数表)

    };

    <类名>::<函数名>(参数表)

    {

    //函数体

    }

    如以下定义是合法的:

    class T

    {

    public:

    T(int a=0){i=a;}//构造函数允许直接写在类定义内,也允许有参数表。

    private:int i;

    };

指针:

  1. 用处:一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。

    2. this只能在成员函数中使用。
    全局函数,静态函数都不能使用this。
    实际上,成员函数默认第一个参数为T* const register this。
    如:
    class A{public: int func(int p){}};
    其中,func的原型在编译器看来应该是: int func(A* const register this, int p);
    由此可见,this在成员函数的开始前构造的,在成员的结束后清除。
    这个生命周期同任一个函数的参数是一样的,没有任何区别。
    当调用一个类的成员函数时,编译器将类的指针作为函数的this参数传递进去。如:
    A a;
    a.func(10);
    此处,编译器将会编译成: A::func(&a, 10);

关于this 指针这里有一个问题,this指针如何传递给类中函数的?

this是通过函数参数的首参数来传递的。this指针是在调用之前生成的。类实例后的函数,没有这个说法。类在实例化时,只分配类中的变量空间,并没有为函数分配空间。自从类的函数定义完成后,它就在那儿,不会跑的。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


名称栏目:this指针和构造函数-创新互联
文章分享:http://pwwzsj.com/article/djciop.html