精华内容
下载资源
问答
  • 构造函数的作用是初始化对象,即在创建对象时系统调用(与普通方法不同,程序不能显示调用构造函数)。构造函数还能够重载,即可以传入参数,当程序中包含有带参的构造函数时,系统将不会再提供的无参构造函数。...

    在java语言 中,构造函数又称构造方法。特殊性在于,与普通方法的区别是,他与类名相同,不返回结果也不加void返回值。构造函数的作用是初始化对象,即在创建对象时被系统调用(与普通方法不同,程序不能显示调用构造函数)。构造函数还能够被重载,即可以传入参数,当程序中包含有带参的构造函数时,系统将不会再提供的无参构造函数。构造函数特点:没有函数返回值,构造函数名与类名相同;当创建类对象的时候调用其对应的构造方法去创建。每创建一个类的实例都去初始化它的所有变量是乏味的。如果一个对象在被创建时就完成了所有的初始工作,将是简单的和简洁的。因此,Java在类里提供了一个特殊的成员函数,叫做构造函数(Constructor)。 一个构造函数是对象被创建时初始对象的成员函数。它具有和它所在的类完全一样的名字。一旦定义好一个构造函数,创建对象时就会自动调用它。构造函数没有返回类型,即使是void类型也没有。这是因为一个类的构造函数的返回值的类型就是这个类本身。构造函数的任务是初始化一个对象的内部状态,所以用new操作符创建一个实例后,立刻就会得到一个清楚、可用的对象。 构造方法是一种特殊的方法,具有以下特点。

    • 构造方法的方法名必须与类名相同。
    • 构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
    • 构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
    • 构造方法不能由编程人员调用,而要系统调用。
    • 一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。
    • 构造方法可以重载,以参数的个数,类型,或排列顺序区分。
    展开全文
  • java构造函数什么时候被调用及特点1 构造函数什么时候被调用2 构造函数特点 1 构造函数什么时候被调用 在java语言 中,构造函数又称构造方法。构造函数的作用是初始化对象,即在创建对象时被系统调用(与普通...

    java构造函数在什么时候被调用及特点

    1 构造函数在什么时候被调用

    在java语言 中,构造函数又称构造方法。构造函数的作用是初始化对象,即在创建对象时被系统调用(与普通方法不同,程序不能显示调用构造函数)。

    2 构造函数特点

    构造函数的任务是初始化一个对象的内部状态,所以用new操作符创建一个实例后,立刻就会得到一个清楚、可用的对象。 构造方法是一种特殊的方法,具有以下特点。
    (1)构造方法的方法名必须与类名相同。
    (2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
    (3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
    (4)构造方法不能由编程人员调用,而要系统调用。
    (5)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。
    (6)构造方法可以重载,以参数的个数,类型,或排列顺序区分。

    展开全文
  • 1、对象在创建时使用其他... //此时p作为函数的参数进行值传递,p入栈时会调用复制构造函数创建一个局部对象,与函数内的局部变量具有相同的作用域需要注意的是,赋值并不会调用复制构造函数,赋值只是赋值运算符(重载)

    1.对象在创建时使用其他的对象初始化

    Person p(q); //此时复制构造函数被用来创建实例p
    Person p = q; //此时复制构造函数被用来在定义实例p时初始化p
    

    2.对象作为函数的参数进行值传递时

    f(p); //此时p作为函数的参数进行值传递,p入栈时会调用复制构造函数创建一个局部对象,与函数内的局部变量具有相同的作用域
    

    需要注意的是,赋值并不会调用复制构造函数,赋值只是赋值运算符(重载)在起作用

    p = q; //此时没有复制构造函数的调用!
    

    简单来记的话就是,如果对象在声明的同时将另一个已存在的对象赋给它,就会调用复制构造函数;如果对象已经存在,然后将另一个已存在的对象赋给它,调用的就是赋值运算符(重载)

    默认的复制构造函数和赋值运算符进行的都是”shallow copy”,只是简单地复制字段,因此如果对象中含有动态分配的内存,就需要我们自己重写复制构造函数或者重载赋值运算符来实现”deep copy”,确保数据的完整性和安全性。

    eg:

    string.h

    #include<iostream>
    #include<cstring>
    #ifndef STRING_H_
    #define STRING_H_
    class string
    {
    private:
        char *data;
    public:
        string();
        string(const char *value);
        string(const string & s);
        ~string();
        operator=(const string & s);
    };
    #endif

    string_h.cpp

    #include"string.h"
    using std::cout;
    using std::endl;
    
    string::string()
    {
        data=new char[4];
        data="c++";
       cout<<"构造函数无参:"<<data<<endl;
    
    }
    
    string::string(const char *value)
    {
        if(value)
        {
            data=new char[strlen(value)+1];
            strcpy(data,value);
        }
        else
        {
            data=new char[1];
            *data='\0';
        }
        cout<<"构造函数有参:"<<data<<endl;
    }
    
    string::string(const string & s)
    {
        data=new char[strlen(s.data)+1];
        strcpy(data,s.data);
        cout<<"拷贝构造函数:"<<data<<endl;
    }
    
    string::~string()
    {
        delete [] data;
    }
    
    string::operator =(const string & s)
    {
        data=new char[strlen(s.data)+1];
        strcpy(data,s.data);
        cout<<"重载操作符=:"<<data<<endl;
    }

    string.cpp

    #include<iostream>
    #include"string.h"
    
    int main()
    {
        string a("hello"); // 定义并构造 a ,有参构造
        string b(a); // 定义并构造b,显式调用拷贝构造函数
        string c;//无参构造 
        c=a;//调用=运算符重载
        string d=c;//隐式调用拷贝构造函数,而不是=运算符重载
        return 0;
    }

    转自:http://www.cnblogs.com/vinsonLu/archive/2012/09/28/2706723.html

    展开全文
  • 拷贝构造函数什么时候调用? 1当用类的一个对象初始化该类的另一个对象时.例如: C/C++ code int main() { point A(1,2); point B(A);//用对象A初始化对象B,拷贝构造函数被调用. } 2 如果...

    拷贝构造函数什么时候调用?

    1当用类的一个对象初始化该类的另一个对象时.例如:

    C/C++ code
    int main() { point A(1,2); point B(A);//用对象A初始化对象B,拷贝构造函数被调用. }

    2 如果函数的形参是类的对象,调用函数时,进行形参和实参结合时. 
    C/C++ code
    void f(point p) { } main() { point A(1,2); f(A);//函数的形参为类的对象时,当调用函数时,拷贝构造函数被调用. }
    3 如果函数的返回值是类的对象,函数执行完成返回调用者时. 
    C/C++ code
    point g() { point A(1,2); return A;//函数的返回值是类的对象,返回函数值时,调用拷贝构造函数. } void main() { point B; B = g(); }

    4、需要产生一个临时类对象时。

    展开全文
  • 首先,一般来说,在构造函数调用方法没有问题.这些问题特别针对调用构造函数类的可覆盖方法的特定情况,以及将对象的this引用传递给其他对象的方法(包括构造函数).避免可覆盖方法和“泄漏”的原因可能很复杂,但它们...
  • //此时复制构造函数被用来创建实例p Person p = q; //此时复制构造函数被用来在定义实例p时初始化p 2、对象作为函数的参数进行值传递时 f(p); //此时p作为函数的参数进行值传递,p入栈时会调用复制构造函数创建...
  • 复制构造函数什么时候被调用

    千次阅读 2013-07-30 12:00:02
    假设Person是一个类,复制构造函数调用会在以下几种情况下发生: 1、对象在创建时使用其他的对象初始化 Person p(q); //此时复制构造函数被用来创建实例p Person p = q; //此时复制构造函数被用来在
  • 分别是在主调函数中调用,还是被调用函数中调用? 是否和调用约定有关? 或者是未指定行为?
  • 写这个博客的原因是因为最近在面试的时候被问过好几次这个问题,但是却一直处于一种模棱两可的状态, 因此今天记录一下这个问题的一个理解已经代码实验的现象. 构造函数调用虚函数 都知道虚函数是为了实现多态中的一...
  • 一直没搞清楚,View的三个构造函数View(Context context)、View(Context context, AttributeSet attrs)、View(Context context, AttributeSet attrs, int defStyle)分别会在什么情况下被调用? 只知道平时通过配置...
  • 什么是复制构造函数: 复制构造函数是一种特殊的构造函数,具有一般构造...那么复制构造函数一般在什么情况下被调用呢,有三种情况: (1)当用类的一个对象去初始化该类的另一个对象的时候 例: int main() ...
  • 假设Person是一个类,复制构造函数调用会在以下几种情况下发生: 1、对象在创建时使用其他的对象初始化 Person p(q); //此时复制构造函数被用来创建实例p Person p = q; //此时复制构造函数被用来在定义...
  • 对象创建后必须立即初始化,换句话说,只要创建对象,就会调用构造函数。 初始化和赋值的区别 初始化和赋值都是将数据写入内存中,并且从表面上看起来,初始化在很多时候都是以赋值的方式来实现的,所以很容易...
  • php构造函数是对象创建完成后,第一个自动调用的方法,析构函数是当对象释放之前最后一个自动调用的方法。本文章向大家介绍php构造函数与析构函数。php构造函数1.是对象创建完成后,“第一个”“自动调用”的方法2....
  • C++ 拷贝构造函数什么时候被调用呢? 1.用已经创建好的类对象来初始化新的对象。 当我们之前已经创建好了一个类的对象时,我们可以用这个类对象来初始化一个新的对象,这时候,就需要用到拷贝构造函数。 2.以值传递...
  • C++默认构造函数

    万次阅读 多人点赞 2018-02-08 12:43:51
    默认构造函数什么时候被调用? 编译器在什么情况下会生成默认构造函数? 一. 什么是默认构造函数? 我们一般会认为默认构造函数就是编译器自动生成的那个构造函数,其实这种理解不全面。 准确的说,默认构造...
  • c++类拷贝构造什么时候被调用

    千次阅读 2017-08-15 14:57:28
    拷贝构造情况==调用了拷贝构造就不调构造==在什么情况下系统会调用拷贝构造函数:(三种情况)(1)用类的一个对象去初始化另一个对象时(2)当函数的形参是类的对象时(也就是值传递时),==如果是引用传递则不会...
  • 1 如果在全局范围内定义对象(即在所有函数之外定义的对象),那么它的构造函数在本文件...如果对象所在的局部变量多次被调用,则在每次建立对象的时候都调用构造函数。在函数调用结束、对象释放时调调用析构函数。 3
  • 构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用,一般方法在程序执行到它的时候被调用。一个类可以有多个构造函数,根据其参数个数的不同或参数类型的不同来区分它们,即构造函数的重载。  2...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 694
精华内容 277
关键字:

构造函数什么时候被调用