首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

构造函数与直接赋值的赋值

构造函数与直接赋值的区别在于,构造函数是在创建对象时自动调用的,而直接赋值是在对象创建后进行的。

构造函数是一种特殊的方法,用于初始化对象的状态。它可以设置默认值、执行必要的操作或者分配资源。构造函数的名称与类名相同,并且没有返回值类型。

直接赋值是在对象创建后,通过对象的属性或方法为其赋值。这种方式可以在对象创建后随时进行,也可以在创建对象时直接进行。

以下是一个简单的例子,演示了构造函数与直接赋值的区别:

代码语言:java
复制
public class Person {
    private String name;
    private int age;

    // 构造函数
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 直接赋值
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

在上面的例子中,我们定义了一个 Person 类,它有两个属性 nameage。我们使用构造函数为这两个属性赋值,并且使用直接赋值为 nameage 属性赋值。

使用构造函数的优势在于,它可以确保对象在创建时具有正确的状态。使用直接赋值的优势在于,它可以在对象创建后随时进行,并且可以根据需要进行多次赋值。

在实际应用中,构造函数和直接赋值都是非常常见的编程技巧。构造函数可以用于初始化对象的状态,而直接赋值可以用于更新对象的属性值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【C 语言】指针间接赋值 ( 直接赋值 和 间接赋值 | 在子函数中间接赋值 )

文章目录 一、直接赋值 和 间接赋值 二、在子函数中间接赋值 一、直接赋值 和 间接赋值 ---- 在 函数体 内部 , 声明普通变量 , 直接赋值 : 直接修改该变量 , 称为 直接赋值 ; 简介赋值...: 将该变量的地址 赋值 给指针 , 通过 指针 修改内存中的变量数据 , 称为 间接赋值 ; 代码示例 : #include #include int main...printf("a = %d\n", a); return 0; } 执行结果 : 二、在子函数中间接赋值 ---- 在 函数体 内部 , 声明普通变量 , 如果 获取该变量的地址 , 将该...地址 传递给 函数形参 , 在外部函数中 , 通过指针地址 , 修改内存中的数据 ; 这同时也是 参数 作为 返回值 的原理 ; 代码示例 : #include #include... /* * 在本函数中, 将传入的 p 指针指向的地址 * 对应的 数据 修改为 30 */ void modify_a(int *p) { *p = 30; }

3.8K10

【C++】拷贝构造函数与赋值的区别

拷贝构造函数 拷贝构造函数的也是一种构造函数,它的作用是将一个类的成员拷贝到另一个类中,类似于赋值。拷贝构造函数分为深拷贝和浅拷贝。...先来定义一个拷贝构造函数(构造函数可以重载),看招: #include using namespace std; class date { public: date(int year...拷贝构造函数的使用方法 拷贝构造函数的使用: 1.使用();2.使用'=';像这样 拷贝构造函数与赋值运算符的区别 那么拷贝构造函数和赋值运算符有什么区别呢,先来看一段代码对比一下: int main...() { date d1(20244, 4, 24); date d2=d1; date d3; d3= d1;//编译器会自动将其转化为d3(d1); return 0; } 这里d2采用的拷贝构造函数的方式...,d3采用赋值的方式,通过观察,我们可以发现,前者是创造变量时就对类进行了赋值,这个赋值叫做初始化,而后者是先定义好的类,后续赋值,在赋值之前是已经将变量创建好的; 谈深拷贝和浅拷贝 先说浅拷贝 浅拷贝

11110
  • C++雾中风景6:拷贝构造函数与赋值函数

    在进行C++类编写的过程之中,通常会涉及到类的拷贝构造函数与类的赋值函数。初涉类编写的代码,对于两类函数的用法一直是挺让人困惑的内容。这篇文章我们会详细来梳理拷贝构造函数与赋值函数的区别。...如果我们没有在类之中显式重载对应类的赋值函数,C++编译器也会默认生成对应的赋值函数。生成的规则与拷贝构造函数类似,也是一种浅拷贝的形式。...所以我们重载赋值函数的原因也与拷贝构造函数类型,需要实现深度赋值。 由上文的代码也可以看出,赋值函数与拷贝构造函数定义的内容之中,所做的工作大同小异。...而当对象已经存在,用别的对象来给它进行赋值操作时,调用的就是赋值函数了。 最后的小Tips:一旦在类之中声明了拷贝构造函数与赋值函数,编译器将不会生成缺省的对应函数。...,无法通过编译 } 好的,关于拷贝构造函数与赋值函数,就先写到这里。

    63020

    构造函数没有返回值是怎么赋值的?

    众所周知,在java里是不能给构造函数写返回值的,如果在低版本的编译器定义一个构造器写上返回值可能会报错,高版本里面他就是一个普通的方法。...可是如果构造函数没有返回值,那么比如Test t = new Test()我们new一个对象的时候是怎么赋值的呢?...我在书里找到这样一段话: 在 Java 虚拟机层面上,Java 语言中的构造函数是以一个名为init的特殊实例初始化方法的形式出现的,init这个方法名称是由编译器命名的,因为它并非一个合法的 Java...init代表着虚拟机调用构造函数,现在情况很明显,构造函数返回类型是void,那么它究竟是怎么赋值的呢?...赋值探究 我们明白一点,方法的调用过程就是栈帧入栈和出栈的过程,栈帧随着方法的调用创建,方法结束销毁。栈帧的内部包含局部变量表、操作数栈、动态链接等。

    1.7K20

    GLSL ES 语言—矢量和矩阵的赋值构造函数

    矢量构造函数 GLSL ES 提供了丰富灵活的方式来创建矢量,比如: //将v3设为(1.0, 0.0, 0.5)vec3 v3 = vec3(1.0, 0.0, 0.5); //使用v3的前两个元素,...v2中的所有元素填充进来,如果还未填满,就继续用第2个参数v4中的元素填充。...矩阵构造函数 需要注意矩阵中的元素是按照列主序排列的,看下面几个例子显示使用了矩阵构造函数的不同方式。...使用矩阵构造函数mat4()传入每一个元素的数值 mat4 m4 = mat4(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0...向矩阵构造函数中传入矢量和数值,同样按照注列主序传入 // 使用两个浮点数和一个vec2 mat2 = mat2(1.0, 3.0, v2_2); 向矩阵构造函数中传入单个数值,对角线上元素都是该数值,

    1.3K20

    构造函数没有返回值是怎么赋值的?

    个人原创100W+访问量博客:点击前往,查看更多 转自:艾小仙 众所周知,在java里是不能给构造函数写返回值的,如果在低版本的编译器定义一个构造器写上返回值可能会报错,高版本里面他就是一个普通的方法。...可是如果构造函数没有返回值,那么比如Test t = new Test()我们new一个对象的时候是怎么赋值的呢?...我在书里找到这样一段话: 在 Java 虚拟机层面上,Java 语言中的构造函数是以一个名为init的特殊实例初始化方法的形式出现的,init这个方法名称是由编译器命名的,因为它并非一个合法的 Java...init代表着虚拟机调用构造函数,现在情况很明显,构造函数返回类型是void,那么它究竟是怎么赋值的呢?...赋值探究 我们明白一点,方法的调用过程就是栈帧入栈和出栈的过程,栈帧随着方法的调用创建,方法结束销毁。栈帧的内部包含局部变量表、操作数栈、动态链接等。

    1.7K20

    C++构造函数体内赋值与初始化列表的区别

    1.C++构造函数初始化列表处提示出现 error: expected ‘{’ before ‘this’ 问题描述下: Linux环境运行,使用g++编译,贴上如下代码出错处已标注于代码中。...以上问题的解决方案就是去掉this。 ---- 2.初始化列表中不能使用this,那构造函数体内是否可以使用this呢?...答案是,当然可以,因为构造函数对成员数据的初始化在是在初始化列表中完成的,构造函数体内对数据成员所做的工作仅仅是赋值操作,在此之前,类成员数据已经完成了初始化工作,是由其默认构造函数完成的。...所以,这也是编程原则中尽量使用初始化列表的原因。...const int& num,const string& name) :this->num(num),this->studentNmae(name) {} }; 以上代码编译不会通过,但是将类成员数据的初始化改为赋值

    87520

    C++构造函数体内赋值与初始化列表的区别

    Linux环境下,使用g++编译以下使用初始化列表的代码时出现编译错误error: expected '{' before 'this'。...化列表中不能使用this,那构造函数体内是否可以使用this呢?...答案是可以,因为构造函数对成员数据的初始化在是在初始化列表中完成的,构造函数体内对数据成员所做的工作仅仅是赋值操作,在此之前,类成员数据已经完成了初始化工作,是由其默认构造函数完成的。...所以,这也是编程原则中尽量使用初始化列表的原因。...将上面错误代码的类数据成员的初始化改为在构造函数体内赋值,则没有问题,代码修改如下: class someClass { int num; string studentNmae; public:

    1.4K21

    【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)

    构造函数的函数名与类名相同。 2. 构造函数无返回值。(连void都不写) 3. 构造函数可以重载。 4. 当对象被创建时,自动调用构造函数。...二、析构函数 与构造函数相反,析构函数是在对象销毁时调用的,它的作用是在对象被销毁时完成对对象生成的资源的清理释放工作。...与构造函数类似,对于编译器自己生成的析构函数,当其对象被销毁时,内置类型成员变量通常不被处理;对于自定义类型成员变量,则会调用其析构函数。 7....顾名思义,赋值重载就是对赋值运算符的重载函数,这个函数有点类似于拷贝构造,它的功能是完成已经存在的对象的拷贝赋值,这一点要和拷贝构造区分。 它的特点如下: 1....与拷贝构造相同,如果我们的类中申请了资源,则需要自己显示写赋值重载来完成深拷贝;若没有申请资源,则可直接使用自动生成的赋值重载。

    17010

    Java构造函数没有返回值,是怎么赋值的?

    众所周知,在java里是不能给构造函数写返回值的,如果在低版本的编译器定义一个构造器写上返回值可能会报错,高版本里面他就是一个普通的方法。...可是如果构造函数没有返回值,那么比如Test t = new Test()我们new一个对象的时候是怎么赋值的呢?...我在书里找到这样一段话: 在 Java 虚拟机层面上,Java 语言中的构造函数是以一个名为init的特殊实例初始化方法的形式出现的,init这个方法名称是由编译器命名的,因为它并非一个合法的 Java...init代表着虚拟机调用构造函数,现在情况很明显,构造函数返回类型是void,那么它究竟是怎么赋值的呢?...赋值探究 我们明白一点,方法的调用过程就是栈帧入栈和出栈的过程,栈帧随着方法的调用创建,方法结束销毁。栈帧的内部包含局部变量表、操作数栈、动态链接等。

    2.1K00

    js对象的直接赋值、浅拷贝与深拷贝

    这里就是出现了题目所谈到的问题,涉及到了js对象的直接赋值、浅拷贝与深拷贝。 直接赋值   把一个对象a赋值给一个对象b相当于把一个对象b的地址指向对象a的地址,所以,他们实际上是同一个对象。...由于这个项目是Vue,这次的问题就出现在了直接赋值上,Vue的响应式会让你更直观的知道他们的实质。...即:直接赋值,修改赋值后的对象b的非对象属性,也会影响原对象a的非对象属性;修改赋值后的对象b的对象属性,也会影响原对象a的对象属性。...以之前直接赋值的对象为例,如图3所示。...图3 浅拷贝,赋值的对象与被复制的对象不会指向同一个地址   修改赋值后的对象b的非对象属性,不会影响原对象a的非对象属性;修改赋值后的对象b的对象属性,却会影响原对象a的对象属性,如图4所示。

    4.3K20

    C++类的复制构造函数和赋值运算符

    ,系统会自动的提供:     (1)构造函数     (2)析构函数     (3)地址运算符     (4)赋值构造函数     (5)赋值运算符     其中(1)-(3)在编程中不会产生什么影响,...但是(4)(5)会造成较大的影响 二、赋值构造函数 1、函数原型  Class_name(const Class_name &) 2、什么时候会用调用复制构造函数?    ...除了直接看出来的一些表达式能满足以上两个条件,函数的按值传递(函数按值传递的是变量的副本)和函数返回对象的情况也同时满足了以上两个条件。...而且有些情况编译器会生成临时变量,然后将临时变量在赋值给被传递的对象。 3、默认复制构造函数做了哪些事情?     默认赋值构造函数逐个复制非静态成员的值。注意是值,是一种浅复制。...4、下面举个例子看看动态内存分配的情况不定义显示的赋值构造函数会出现什么问题 1 // 复制构造函数探索.cpp : 定义控制台应用程序的入口点。

    1.2K70

    map和multimap容器构造和赋值

    简介: map中所有元素都是pair map中第一个元素为key(键值)起到索引作用,第二个元素为value(实值) 所有元素都会根据元素的键值自动排序 本质: map和multimap容器属于关联式容器...底层结构是用二叉树实现 优点: 根据key值快速找到value值 map和multimap容器区别: map容器中不能有重复key元素出现 multimap容器中能有重复key元素出现 map构造和赋值...= m1.end(); it++) { cout << "键值: " << (*it).first << " 实值: "<<(*it).second << endl; } } //map容器的构造和赋值...void test() { //1.默认构造函数 map m1; //插入元素 for (int i = 1,j=2; i <= 6; i++,j++) { /.../pair对组不需要包含头文件 m1.insert(pair(i, j)); } //打印 print(m1); //2.拷贝构造 map m2(

    51710

    C++的四个默认函数(构造函数,析构函数,拷贝函数,赋值函数)

    = (const A &) //默认赋值函数。...析构函数 与构造函数相对立的是析构函数,这个函数在对象销毁之前自动调用,例如在构造函数中,我们为成员变量申请了内存,我们就可以在析构函数中将申请的内存释放,析构函数的写法是在构造函数的基础上加一个~符号...赋值函数 四个默认函数,当赋值函数最为复杂。 Animal& operator=(const Animal&obj) { if(this !...而赋值函数是在当年对象已经创建之后,对该对象进行赋值的时候调用的,Animal a; a = b。...和拷贝构造函数一样,若类中有指针变量,自动生成的赋值函数注定会出错,老样子,先申请内存,再复制值即可完美解决。

    2.3K20
    领券