精华内容
下载资源
问答
  • 在类中定义构造函数的作用是
    千次阅读
    2020-08-08 18:18:47
    #include<iostream>
    using namesapce std;
    int main(void) {
    	class A
    	{
    	public:
    		A();//声明构造函数
    	};
    	A::A()//定义构造函数
    	{
    	};
    	return 0;
    }
    //在类内声明构造函数,在类的外面定义构造函数,
    //这种方式有的编译器能通过,有的编译器不能通过
    
    更多相关内容
  • C++-构造函数作用

    千次阅读 2021-06-09 09:48:00
    构造函数作用 为了解决给对象成员初始化赋值的问题,C++提供了“构造函数(constructor)”来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是建立对象时自动...

    构造函数的作用

           为了解决给对象成员初始化赋值的问题,C++提供了“构造函数(constructor)”来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行。

    构造函数的名字必须与类名同名,而不能由用户任意命名,以便编译系统能识别它并把它作为构造函数处理。构造函数不返回任何值,所以,函数没有返回类型。

    例如,定义一个C++类,类名是 student,如下:

    class student       //class开头

    {   ... };

    那么,构造函数的函数名与类名相同,所以,构造函数的函数名是student,例如:

    student();                      //没有参数的构造构造函数;

    student(char* name);     //带参数的构造函数;

    构造函数的功能是由用户定义的,用户根据初始化的要求设计函数体和函数参数。在讲解构造函数之前,我们先写一个例子,测试构造函数的使用。测试代码如下:

           程序的运行结果有:

           在类student中定义了构造函数:

    student(char* pn, char* pa, long long n);

    构造函数的名称和所在的类同名。在建立对象时自动执行构造函数,它的作用是对定义的对象进行初始化。例如给成员变量赋初值,赋值语句是写在构造函数的函数体中,只有在调用构造函数的时候,才执行这些赋值语句,为当前对象的成员变量赋值。

           在上面的例子中,我们定义了stud对象,在定义对象的同时,给对象的成员变量赋值。定义对象如下:

    student stud("wkf", "www.mylinux.vip", 13926572996);

           此时,定义stud对象,给对象设置3个数据,根据这些数据的类型,就调用对应的构造函数:

    student(char* pn, char* pa, long long n);

           所以,把参数设置到对应的构造函数中,如下:

    pn = "wkf";

    pa = "www.mylinux.vip";

    n = 13926572996;

           给构造函数的参数设置数据之后,就执行构造函数。

    上面是在类内定义构造函数,也可以只在类内对构造函数进行声明,而在类外定义构造函数。在类外定义构造函数,如下:

           可以看到,把student(char* pn, char* pa, long long n);构造函数放在类外定义。有关构造

    函数的使用,有以下说明:

    (1) 构造函数的名称,与类名一样。

    (2) 什么时候调用构造函数?定义类对象的时候,开始构建对象,调用类的构造函数。

    (3) 构造函数没有返回值,因此,也不需要在定义构造函数时声明函数返回类型,这是它和一般函数的一个重要的不同之点,不能写成:

    void student ()

    {.....}

    构造函数的作用主要是用来对对象进行初始化。

    (4) 构造函数是建立对象时由系统自动执行的,而且只执行一次。所以,构造函数不能够由用户调用。

    (5) 在构造函数的函数体中不仅可以对成员变量赋初值,而且,可以包含其他语句,例如cout语句。但是,一般不提倡在构造函数中加入与初始化无关的内容。

    韦凯峰 Linux C/C++ 程序设计教程,Linux 系统编程,Openwrt 系统开发,微信:13926572996,QQ:1523520001,博客:www.mylinux.vip

    展开全文
  • 在类中定义多个构造函数

    千次阅读 2019-08-18 23:18:09
    问题 如果想让用户能够以多种方式创建实例,而不局限于__init()__方法,可以用下面的解决方案 import time ...1.方法的一大主要用途就是定义...如果需要的话,可以其备选的构造函数中选择实现理高级的操作)

    问题

    如果想让用户能够以多种方式创建实例,而不局限于__init()__方法,可以用下面的解决方案

    
    import time
    
    
    class Date:
        #primary constructor
        def __init__(self, year, month, day):
            self.year = year
            self.month = month
            self.day = day
    
        # alternate constructor
        @classmethod
        def today(cls):
            t = time.localtime()
            return cls(t.tm_year, t.tm_mon, t.tm_mday)
    
        def __repr__(self):
            return "year:%s, month:%s, day:%s" % (self.year, self.month, self.day)
    
        def __str__(self):
            return self.__repr__()
    
    
    if __name__ == '__main__':
        a = Date(2019, 8, 10)
        b = Date.today()
        print(a)
        print(b)
    
    

    讨论

    1.类方法的一大主要用途就是定义其它可选的构造函数。
    2.类方法的一个关键特性是把类作为其接收的第一个参数(cls).
    3.类方法中会用到这个类来创建并返回最终的实例
    4.当定义一个有着多个构造函数的类时,应该让__init()__尽可能的简单(例如做一些赋值操作外,其它什么都不做;如果需要的话,可以在其备选的构造函数中选择实现理高级的操作)

    展开全文
  • 函数定义方式: 1.声明式函数定义: function... 此方式定义函数,只能作用,这段赋值代码执行之后才能通过fun()调用函数,否则,由于变量声明提升,fun === undefined。 3.new Function 形式: var fun1

    函数的定义方式:
    1.声明式函数定义: function 函数名 (){};这种定义方式,会将函数声明提升到该函数所在作用域的最开头,也是就无论你在这个函数的最小作用域的那儿使用这种方式声明的函数,在这个作用域内,你都可以调用这个函数为你所用。
    2.函数表达式:let fun = function(){}; 此方式定义的函数,只能在该作用域中,这段赋值代码执行之后才能通过fun()调用函数,否则,由于变量声明提升,fun === undefined。
    3.new Function 形式: var fun1 = new Function (arg1 , arg2 ,arg3 ,…, argN , body );Function构造函数所有的参数都是字符串类型。除了最后一个参数, 其余的参数都作为生成函数的参数即形参。这里可以没有参数。最后一个参数, 表示的是要创建函数的函数体。

    构造函数
    在 JavaScript 中,用 new 关键字来调用的函数,称为构造函数。构造函数首字母一般大写(规范)。
    之所以有构造函数与普通函数之分,主要从功能上进行区别的,构造函数的主要 功能为 初始化对象,特点是和new 一起使用。new就是在创建对象,从无到有,构造函数就是在为初始化的对象添加属性和方法。

    1、常用的构造函数:
     var arr = []; 为 var arr = new Array();
     var obj = {} 为 var obj = new Object();
     var date = new Date();
     
    2、执行构造函数时发生的事 :

    let p = new Person();
    function Person(name,age,sex){
    	this.name = name;
    	this.age = age;
    	this.sex = sex;
    }
    Person.prototype.say = function(){
    	console.log('定义了一个Person的新方法say');
    }
    let f = new Person ('青衣浏阳',18,'男');  //  f.name = '青衣浏阳';f.age = 18; f.sex = '男';
    f.say();     //定义了一个Person的新方法say
    

    构造函数会有以下几个执行过程
    (1) 当以 new 关键字调用时,会创建一个新的内存空间,标记为 Animal 的实例。
    (2)函数体内部的 this 指向该内存

    var f1 = new Person('ls',20, '女');  // 创建一个新的内存 #f1
    var f2 = new Person('lss',22, '女');  // 创建一个新的内存 #f2
    

    每当创建一个实例的时候,就会创建一个新的内存空间(#f1, #f2),创建 #f1 的时候,函数体内部的 this 指向 #f1, 创建 #f2 的时候,函数体内部的 this 指向 #f2。

    (3) 执行函数体内的代码
    就是给 this 添加属性,就相当于给实例添加属性。
    (4) 默认返回 this
    由于函数体内部的this指向新创建的内存空间,默认返回 this ,就相当于默认返回了该内存空间,也就是上图中的 #f1。此时,#f1的内存空间被变量p1所接受。也就是说 p1 这个变量,保存的内存地址就是 #f1,同时被标记为 Person 的实例。
    以上就是构造函数的整个执行过程。

    3、用new和不用new调用构造函数,有什么区别?

    1、用new调用构造函数,函数内部会发生如下变化:
    创建一个this变量,该变量指向一个空对象。并且该对象继承函数的原型;
    属性和方法被加入到this引用的对象中;
    隐式返回this对象(如果没有显性返回其他对象)
    简单的说 用new调用构造函数,最大特点为,this对象指向构造函数生成的对象

    2、如果直接调用函数,那么,this对象指向window,并且,不会默认返回任何对象(除非显性声明返回值)。

    4、构造函数的返回值
    构造函数执行过程的最后一步是默认返回 this 。言外之意,构造函数的返回值还有其它情况。
    没有手动添加返回值,默认返回 this。手动添加一个基本数据类型的返回值,最终还是返回 this。

    function P() {
     this.name = '青衣浏阳';
    }
    var p1 = new P();
    console.log(p1)  //Person1 {name: "青衣浏阳"}
    

    手动添加一个复杂数据类型(对象)的返回值,最终返回该对象。

    function P2() {
      this.sex = '男';
      return { sex: '女' };
    }
    var p3 = new P2();
    console.log(p3.sex);  //女
    

    5、构造函数有什么用?
    当你需要大批量的写对象的时候,就需要用到构造函数,它可以方便创建多个对象的实例,并且创建的对象可以被标识为特定的类型,可以通过继承扩展代码

    举个例子,我们要录入很多同学的个人信息,那么我们可以创建一些对象,比如:

    var p1 = { name: 'zs', age: 6, sex: '男'};
    var p2 = { name: 'ls', age: 6, sex: '女'};
    var p3 = { name: 'ww', age: 6, sex: '女'};
    var p4 = { name: 'zl', age: 6, sex: '男'};
    

    像上面这样,我们可以把每一位同学的信息当做一个对象来处理。但是,我们会发现,我们重复地写了很多无意义的代码。比如 name、age、sex 。如果这个班上有60个学生,我们得重复写60遍。

    这个时候,构造函数的优势就体现出来了。我们发现,虽然每位同学都有 name、age、sex这些属性, 但它们都是不同的,那我们就把这些属性当做构造函数的参数传递进去。此时,我们就可以创建以下的函数:

    function Person(name,age, sex,) {
        this.name = name;
        this.age = age;
        this.sex= sex;
    }
    

    当创建上面的函数以后, 我们就可以通过 new 关键字调用,也就是通过构造函数来创建对象了。

    var p1 = new Person('zs', 5,'男');
    var p2 = new Person('luci', 5,'女');
    var p3 = new Person('jack', 6,'男');
    var p4 = new Person('lusi', 6,'女');
    

    此时你会发现,创建对象会变得非常方便。所以,虽然封装构造函数的过程会比较麻烦,但一旦封装成功,我们再创建对象就会变得非常轻松,这也是我们为什么要使用构造函数的原因。
    在使用对象字面量创建一系列同一类型的对象时,这些对象可能具有一些相似的特征(属性)和行为(方法),此时会产生很多重复的代码,而使用构造函数就可以实现代码复用。

    6、 构造函数和普通函数的区别
    1、构造函数也是一个普通函数,创建方式和普通函数一样,但构造函数习惯上首字母大写。
    2、调用方式不一样。
    普通函数的调用方式:直接调用 person();
    构造函数的调用方式:需要使用new关键字来调用 new Person();
    3、构造函数的函数名与类名相同:Person( ) 这个构造函数,Person 既是函数名,也是这个对象的类名。(ES6 中 class 与构造函数的关 系,通过class定义的类 和通过构造函数定义的类 二者本质相同。并且在js执行时,会将第一种转会为第二种执行。所以 ES6 class的写法实质就是构造函数)
    4、内部用this 来构造属性和方法
    5、构造函数的执行流程
    A、立刻在堆内存中创建一个新的对象
    B、将新建的对象设置为函数中的this
    C、逐个执行函数中的代码
    D、将新建的对象作为返回值
    6、构造函数的返回值默认是this 也有其他情况 。普通函数:因为没有返回值,所以为undefined

    写在最后,如有错误欢迎留言指正和补充~

    展开全文
  • python类中定义多个构造函数

    万次阅读 2018-09-20 23:56:33
    当我们编写一个时,我们希望用户可以通过多种不同的方式来创建一个实例,而不是局限于_init_()方法提供的一种。这个时候,就需要我们创建多个构造函数了。 &nbsp;&nbsp;&nbsp;&nbsp;下面是一...
  • python 构造函数作用

    千次阅读 2021-04-27 09:54:18
    1.构造函数的作用构造函数主要用来创建对象时完成对对象属性的一些初始化等操作...2.默认构造函数当用户没有显式的去定义构造函数时,编译器会为生成一个默认的构造函数,称为"默认构造函数",默认构造函数不能完成...
  • c++无参构造函数作用: 该对象被创建时,编译系统为对象分配内存空间,并自动调用该构造函数**->由构造函数完成成员的初始化**工作。 故:**构造函数作用:**初始化对象的数据成员。 举例: class ...
  • 类中构造函数

    千次阅读 2019-07-29 17:47:25
    类中的构造函数 ...当定义一个的时候,如果这个类中没有定义构造函数,则系统会为该提供一个默认的无参数的构造函数。如果自己在类中定义了一个带参数的构造函数,则系统的默认无参数构造函数就不会提供...
  • C++构造函数

    千次阅读 2022-03-01 21:36:01
    详细讲解C++类中构造函数,包含各种细节,一次讲明白!
  • 什么是构造函数定义

    千次阅读 多人点赞 2021-03-07 20:47:43
    什么是构造函数 建立一个对象时,通常最需要立即做的工作是初始化对象,如对数据成员赋初值 构造函数就是用来创造对象时初始化对象,为对象数据成员赋初始值
  • C++——构造函数

    万次阅读 多人点赞 2018-08-29 13:57:31
    每个都分别定义了它的对象被初始化的方式,通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些函数叫构造函数构造函数的任务是初始化对象的数据成员,无论何时只要的对象被创建,就会执行构造...
  • java-可以没有构造函数吗?

    千次阅读 2021-02-12 22:21:04
    该问题的典型答案是“如果不声明构造...但是,如果未明确声明构造函数,则Java定义的任何都具有默认构造函数。 前者的示例是通过Java代码创建的)。考虑下面这个问题的代码:public class Outer{private class Inne...
  • 实体类中构造函数

    千次阅读 2019-03-07 16:04:19
    实体的无参构造函数,可写可不写。 当创建对象进行实例化时 WorkOrderRecordTemplate workOrderRecordTemplate = new WorkOrderRecordTemplate(); 自动创建或者调用该构造函数进行实例化。 实例化的对象为...
  • java 抽象类中构造函数作用

    千次阅读 2020-04-17 12:33:42
    毋庸置疑抽象类中可以定义构造函数,但是这时会有一个疑问,既然抽象的实例化毫无意义那为何又要定义其自己的构造函数呢? 首先,可以通过其内部的构造函数初始化其内部的变量。 其次,可以通过实现它的子类通过...
  • C++结构体定义构造函数

    千次阅读 2020-03-02 17:37:22
    C++除了类中可以有构造函数和析构函数外,结构体也可以包含构造函数和析构函数,这是因为结构体和基本雷同,唯一区别是,类中成员变量默认为私有,而结构体则为公有。注意,C++的结构体是可以有析构函.....
  • C++-构造函数的重载

    千次阅读 2021-06-09 09:54:13
    构造函数的重载 一个类中可以定义多个构造函数,以便对对象提供...所以,一个类中定义多个构造函数构造函数的名称都是相同,只有构造函数的参数不同,那么,就称为构造函数的重载。如下是测试的例子: ...
  • C++-带参数的构造函数

    千次阅读 2021-06-09 09:51:21
    上面的例子,我们student类中定义一个无参的构造函数,如下: student(){ cout << "调用无参构造函数,设置默认值" <<endl; strcpy(name, "wkf"); strcpy(addr, "www.mylinux.vip"); ...
  • C++类中构造函数和赋值函数

    千次阅读 2020-05-30 17:20:17
    构造函数主要包括:默认构造函数、带参构造函数、拷贝构造函数三种,且构造函数经常与赋值函数混淆,这里放在一起讲,便于区分。 首先初始化一个简单的作为例子讲解: class A { public: A() { v = 1; printf...
  • 构造函数定义

    千次阅读 2016-12-15 18:22:44
    简单复习了一下C++的构造函数...1.构造函数的名字必须和(class)的名字相同 2.系统会默认添加一个为空的构造函数 3.可以自行添加含有参数的构造函数 4.构造函数可以进行重载Teacher.h#include #include<algorithm
  • 【C++】构造函数 利用构造函数对象进行初始化

    千次阅读 多人点赞 2022-01-25 16:01:26
    有关构造函数与析构函数的知识点
  • //构造函数的初始化列表:一个类中使用另一个所需要注意的 #include<iostream> using namespace std; class A { private: int a; public: A(int _a) { a=_a; ...
  • C++模板类中的成员函数以及模板函数在类定义

    千次阅读 多人点赞 2020-03-05 18:45:07
    C++类中的成员函数可以在类外完成定义,从而显得类中的成员函数看起来简洁明了。但是模板里的成员函数和模板函数与普通的成员函数在类定义不同。 先定义一个模板以及成员函数和模板函数: 接下我们就...
  • java所有是不是都有一个无参构造函数发布时间:2020-10-27 10:06:11来源:亿速云阅读:70作者:小新小编给大家分享一下java所有是不是都有一个无参构造函数,相信大部分人都还不怎么了解,因此分享这篇文章...
  • scala 类定义构造函数与继承

    千次阅读 2016-11-09 23:52:04
    3.类名之后的括号构造函数的参数列表,这个例子中是类的两个变量xc,yc,且均为Int类型的数据。2.类的构造方法类的定义中可以有多个构造参数。与java不同的是,scala类名称后直接加上构造函数
  • 的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个的成员,出现在类。它可以被指定为private(私有的...
  • 对于派生构造函数在定义对象时构造函数的执行顺序为? 1:成员对象的构造函数 2:基类的构造函数 3:派生本身的构造函数 顺序为213; 当派生类中不含对象成员时 · 创建派生对象时,构造函数的执行...
  • c++中在一个类中定义另一个只有带参数构造函数的对象,编译通不过 class A {  public: A(int i){}  }; class B {  public: B(){}  private:  //A a; //这里当然通不过,没有可用的构造函数  A...
  • C++:构造函数作用及用法

    千次阅读 2020-05-18 17:45:55
    就是构造函数作用可以这样理解,如果没有构造函数就是里边只是声明了成员变量,成员函数,还有最后的对象,这样你对该对象进行初始化赋值时就比较麻烦就得先调用成员函数对成员变量赋值,成员变量进而作用到...
  • #include &lt;iostream&gt;using namespace std;... //声明带参数的构造函数  int volume(); private: int length; int width; int height;};Box::Box(int len,int w,int h){ height=h...
  • 构造函数作用创建的对象时进行对象初始化的。 C++ ,每个都有且必须有构造函数。如果用户没有自行编写构造函数,则 C++ 自动提供一个无参数的构造函数,称为默认构造函数。这个默认构造函数不做...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,241,993
精华内容 496,797
关键字:

在类中定义构造函数的作用是