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

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

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

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

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

    90260

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

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

    86320

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

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

    1.4K21

    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(

    50710

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

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

    2.2K20

    【从零学习OpenCV 4】Mat类构造赋值

    根据OpenCV源码定义,关于Mat类构造方式共有二十余种,然而在平时一些简单应用程序中很多复杂构造方式并没有太多用武之地,因此本书重点讲解笔者在学习和做项目中常用构造赋值方式。...1 01 Mat类构造 (1)利用默认构造函数 代码清单2-4 默认构造函数使用方式 cv::Mat::Mat(); 通过代码清单2-4,利用默认构造函数构造了一个Mat类,这种构造方式不需要输入任何参数...,在后续给变量赋值时候会自动判断矩阵类型大小,实现灵活存储,常用于存储读取图像数据和某个函数运算输出结果。...type:代码清单2-5中参数一致 利用这种方式构造Mat类时要格外注意,在Size()结构里矩阵行和列顺序代码清单2-5中方法相反,使用Size()时,列在前、行在后。...这种构造方式非常简单,可以构造已有的Mat类变量存储内容一样变量。

    4K40
    领券