构造函数

C++ 构造函数

帅比萌擦擦* 提交于 2020-02-10 14:16:29
1.构造函数的作用 在创建对象时,编译器会自动调用构造函数,初始化成员变量。 2.定义 构造函数名是类名; 不管是声明还是定义,函数名前面都不能出现返回值类型,即使是 void 也不允许; 函数体中不能有 return 语句。 #include <iostream> using namespace std; class Date { public: Date(){};//定义默认构造函数 void setDate(int y,int m,int d) { m_year=y;m_month=m;m_day=d; }; void showDate(){ cout<<"year:"<<m_year<<", mouth:"<<m_month<<", day:"<<m_day<<endl;//可以访问类中数据成员 }; private: int m_year; int m_month; public: int m_day; }; 3.构造函数重载 和普通成员函数一样,构造函数是允许重载的。一个类可以有多个重载的构造函数,创建对象时根据传递的实参来判断调用哪一个构造函数。 构造函数的调用是强制性的,一旦在类中定义了构造函数,那么创建对象时就一定要调用,不调用是错误的。如果有多个重载的构造函数,那么创建对象时提供的实参必须和其中的一个构造函数匹配;反过来说,创建对象时只有一个构造函数会被调用。

3. 构造函数

≯℡__Kan透↙ 提交于 2020-02-10 09:54:12
1. inline(内联)函数 inline函数很好,其优点是:传的速度快。那所有函数都做成inline()函数岂不是很好,有的函数没办法做成inline()函数。简单的函数可以,复杂的函数不可以。 来源: https://www.cnblogs.com/yibeimingyue/p/12289898.html

js创建对象

荒凉一梦 提交于 2020-02-10 07:40:44
说到创建对象,我刚开始想到的就是构造函数创建和对象字面量创建,但今天看了书之后,发现创建对象不止这么简单,以下是我的看书后的理解和一些疑惑,在此纪录: //构造函数 var obj1=new Object(); //对象字面量 var obj={ name:"ellen", age:"21" } 构造函数和对象字面量是常用的方法,但缺点是“使用同一个接口创建很多对象,会产生大量重复代码”(这句话感觉没理解清楚,现在理解为如果要创建几个相似对象,他们都有name,age,job,如果用这两种方法,会一直写name,age,job,100个对象就要写100次...)。 工厂模式 抽象了创建具体对象的过程,用函数来封装以特定接口创建对象 function createPerson(name,age,job) { var o=new Object(); o.name=name; o.age=age; o.job=job; o.sayName=function(){ alert(this.name); } return o; } var person1=createPerson("kun",33,"老师"); 这样创建一个对象时,就已经带有name,age,job属性和sayName方法了。解决了之前会造成对个相似对象问题。但没有“解决识别问 构造函数模式 除了像Object

C++对象数组与对象指针

拈花ヽ惹草 提交于 2020-02-10 03:22:06
(一)对象数组   将具有相同类类型的对象有序地集合在一起便构成了对象数组,以一维对象数组为例,其定义形式为:   类名 对象数组名[];   Point points[100];   关于对象数组的几点说明:   (1)在建立对象数组的时候需要调用构造函数。如果对象数组有100个元素,就需要调用100次构造函数。   (2)如果对象数组所属类有带参数的构造函数时,可用初始化列表按顺序调用构造函数,使用复制初始化来初始化每个数组元素。   Point A[3]={Point(0,0),Point(1,1),Point(2,2)}; //Point(int a=0,int b=0)   Point A[3]={Point(1),Point(2),Point(3)}; //Point(int a=0,int b=0)   (3)如果对象数组所属类有单个参数的构造函数时候,定义数组时可以直接在初值列表中提供实参。   Point A[3] ={1,2,3}; //Point(int a=0,int b=0)   等价与:   Point A[3]={Point(1),Point(2),Point(3)};   (4)如果对象数组在创建时没有初始化,则所属类要么有合成默认构造函数,要么定义无参数的构造函数或全部参数为默认参数的构造函数。   (5

Spring学习

99封情书 提交于 2020-02-09 19:48:24
Spring 最近两天回了长沙,待在租房不能出门,复习了一下Spring框架。在Spring框架中,最重要的就是控制反转IOC和面向切面AOP,说一下自己的理解吧,权当自己做了一些笔记。 控制反转IOC 在Spring中通过IOC容器,将对象之间的依赖交由Spring进行统一控制管理,实现程序之间的解耦,IOC包括依赖注入DI和依赖查找,最常被用到的就是依赖注入,是IOC的具体表现。 图片来源于黑马视频 依赖注入DI 实现依赖注入一共有三种注入方式,分别是构造函数注入,Setter注入,基于注解的注入;最常被用到的就是构造函数注入和Setter注入。其中,构造函数注入和Setter注入都在在XML配置,基于注解的注入是通过注解配置。 1, 构造函数注入 使用类中的构造函数,给成员变量赋值。其中,赋值的操作不是我们自己做的,而是通过配置 的方式,让 spring 框架来为我们注入。 涉及到的标签:constructor-arg 属性: index:指定参数在构造函数参数列表的索引位置; type:指定参数在构造函数中的数据类型; name:指定参数在构造函数中的名称(通过这个属性确定为谁赋值); value:它能赋的值是基本数据类型和 String 类型; ref:它能赋的值是其他 bean 类型(必须得是在配置文件中配置过的 bean); 2, Setter注入

js继承方式上

喜你入骨 提交于 2020-02-09 18:33:03
转自:https://www.cnblogs.com/zt123123/p/7676633.html js不是传统的面向对象语言,那么他是怎么实现继承的呢?由于js是基于原型链实现的面向对象,所以js主要通过原型链查找来实现继承,主要有两大类实现方式,分为基于构造函数的继承,以及非构造函数的继承。 由于篇幅较长,所以把文章分为上下篇,今天先讲解上半部分。 现在有两个类即构造函数,一个是动物类 function Animal() {     this.species = "动物";   } 一个是猫类 function Cat(name, color) {     this.name = name;     this.color = color;   } 怎样才能使"猫"继承"动物"的特性呢? 一、 构造函数绑定 第一种方法也是最简单的方法,使用call或apply方法,将父对象的构造函数绑定在子对象上,即在子对象构造函数中加一行: function Cat(name, color) {     Animal.apply(this, arguments);     this.name = name;     this.color = color;   }   var cat1 = new Cat("大毛", "黄色");   alert(cat1.species); // 动物 二、

原型链的理解

怎甘沉沦 提交于 2020-02-09 18:31:21
原型链 本文将从将从什么是原型链,原型链的主要作用,以及函数和对象之间的关系,继承来说。 什么是原型链? 实例对象和原型对象之间形成的链式结构。 原型的主要作用是什么? 数据共享,实现继承 函数和对象的神秘之处 函数属于对象 function fn(){ console.log(123); } console.log(fn instanceof Object); + 上面的代码结果是true。可以证明函数是对象的一种。我们经常又说对象都是函数创建的,在这我来做个解释,这俩句话并不冲突。我们创建对象的时候可以通过构造函数实例化,new Object(),new Array()等方式。 对象是由函数创建出来的 ``` //var obj = { a: 10, b: 20 }; //var arr = [5, 'x', true]; var obj = new Object(); obj.a = 10; obj.b = 20; var arr = new Array(); arr[0] = 5; arr[1] = 'x'; arr[2] = true; + 而Object和Array又是函数 console.log(typeof (Object)); // function console.log(typeof (Array)); // function ``` 既证明了函数是对象

Javascript 面向对象二:继承

天大地大妈咪最大 提交于 2020-02-09 18:29:28
现在有一个"动物"对象的构造函数。   function Animal(){     this.species = "动物";   } 还有一个"猫"对象的构造函数。   function Cat(name,color){     this.name = name;     this.color = color;   } 一、 构造函数绑定 第一种方法也是最简单的方法,使用call或apply方法,将父对象的构造函数绑定在子对象上,即在子对象构造函数中加一行:   function Cat(name,color){ Animal.apply(this, arguments);     this.name = name;     this.color = color;   }   var cat1 = new Cat("大毛","黄色");   alert(cat1.species); // 动物 PS:此处要注意方法call与apple的区别与相同之处: 1.都是在特定的作用域中调用函数。 2apply()接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。 call()方法第一个参数与apply()方法相同,但传递给函数的参数必须列举出来。 二、 prototype模式(原型链继承) 第二种方法更常见,使用prototype属性。 如果"猫

JavaScript 面向对象 ( 继承 )

这一生的挚爱 提交于 2020-02-09 15:57:30
提问:    现在有一个"动物"对象的构造函数。 function Animal(){ this.species = "动物"; }   还有一个 "猫 "对象的构造函数。 function Cat(name,color){    this.name = name;    this.color = color; }      怎样才能使"猫"继承"动物"呢? 一、 构造函数绑定   先来看一段代码: function ClassA(sColor){ this.color=sColor; this.sayColor=function(){ alert(this.color); }; } function ClassB(sColor,sName){ this.newMethod=ClassA; this.newMethod(sColor); delete this.newMethod; //删除对ClassA的引用,这样以后就不能再调用它。所有的新属性和新方法都必须在删除了新方法的代码后定义,否则覆盖超类的相关属性和方法 this.name=sName; this.sayName=function(){ alert(this.name); }; }      这种方式貌似很复杂,其实道理很简单,就是在继承的函数里面,新建一个变量newMethod,然后将ClassA的指针指向这个变量

JavaScript构造函数的继承

喜欢而已 提交于 2020-02-09 15:24:06
现在有一个"动物"对象的构造函数。 function Animal(){ this.species = "动物"; } 还有一个"猫"对象的构造函数。 function Cat(name,color){ this.name = name; this.color = color; } 怎样才能使"猫"继承"动物"呢? 一、 构造函数绑定 使用 call 或 apply 方法,将父对象的构造函数绑定在子对象上,即在子对象构造函数中加一行: function Cat(name,color){ Animal.apply(this, arguments); this.name = name; this.color = color; } var cat1 = new Cat("AA猫","黑色"); alert(cat1.species); // 动物 二、 prototype 模式 如果"猫"的 prototype 对象,指向一个 Animal 的实例,那么所有"猫"的实例,就能继承 Animal 了。 Cat.prototype = new Animal(); Cat.prototype.constructor = Cat; var cat1 = new Cat("AA猫","黑色"); alert(cat1.species); // 动物 上面,我们将 Cat 的 prototype