首页
学习
活动
专区
工具
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.4K10

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

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

61820
  • 构造函数没有返回值是怎么赋值

    众所周知,在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

    析构函数-复制构造函数-赋值操作符重载-默认构造函数

    通过下面primer中一道习题,可以更深刻了解,析构函数,复制构造函数赋值操作符重载,默认构造函数使用。 但是我结果与primer习题解答里面的并不相同,可能是编译器不同原因导致。...cout<<"Exam& operator"<<endl;return *this;} //赋值操作符 ~Exam(){ cout<<"~Exam()"<<endl;}//析构函数 }; void.../返回exam对象 int main(){ cout<<"--------------------1----------------"<<endl; Exam a; //调用默认构造函数创建对象..., //用复制构造函数返回对象副本 //调用析构函数撤销局部对象 //调用赋值函数赋值...//调用赋值构造函数将临时对象复制到每个元素 //调用析构函数撤销 //重复三次 cout<<"

    91260

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

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

    1.7K20

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

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

    1.4K21

    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) {} }; 以上代码编译不会通过,但是将类成员数据初始化改为赋值

    87220

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

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

    2.1K00

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

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

    13610

    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(

    51210

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

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

    2.2K20

    【Python】面向对象 ③ ( 构造函数 | 成员变量赋值问题 | 构造方法引入 | 构造函数可以同时定义成员变量 )

    一、构造函数 1、成员变量赋值问题 在之前博客中 , 定义 Python 类 Student : class Student: name = None # 姓名 age = None..., 才能完成成员变量赋值操作 ; 2、构造方法引入 使用构造方法 , 可以在一行代码内 , 为多个变量同时赋值 , 这样就可以减少代码量 ; 构造方法简介 : 构造方法函数名 : Python 类...构造方法是 __init__() 方法 , 该方法名称 在 init 单词前后各有两个下划线 _ ; 构造方法调用时机 : 在创建 类 实例对象时 , 会自动执行 Python 类 __...; 构造函数还有一个作用 , 就是定义成员变量 , 并为其赋值 ; def __init__(self, name, age): self.name = name...self.age = age 下面的代码中 , 没有定义成员变量 , 直接在 __init__() 构造方法 中进行赋值 ; 代码示例 : """ 面向对象 代码示例 """ class Student

    30430
    领券