温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

this指针和构造函数

发布时间:2020-06-12 03:04:08 来源:网络 阅读:957 作者:迎着风奔跑 栏目:编程语言

构造函数:

 特性:

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指针是在调用之前生成的。类实例后的函数,没有这个说法。类在实例化时,只分配类中的变量空间,并没有为函数分配空间。自从类的函数定义完成后,它就在那儿,不会跑的。


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI