构造函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构造函数相关的知识,希望对你有一定的参考价值。

参考技术A function 函数名 ()

this.属性名 = "";

this.方法名 = function ()

函数体;





var p = new 函数名 ();

p.方法名();//可调用此方法;

//注意:在构造函数里所有的属性和方法皆用this.来书写

构造函数必须通过new关键字来创建,如:

var p = new 函数名("值一","值二","值三")

注意:括号中的值可以是常量,也可以是变量

构造函数与普通函数之间就调用的方式不同

构造函数通过new关键字来调用,普通函数则可以直接调用

普通函数是遵循小驼峰命名法,即第一个单词首字母小写,其余单词首字母大写;

构造函数则是所有单词首字母都为大写

1) 首先要创建一个对象,对象类型就是这个构造函数的名字

2) 最后会把创建好的这个对象自动返回

3) 注意:var p = new 函数名(); 此时的p就已经是一个对象了

4) 调用通过构造函数创建好的对象中的某个属性,格式为: p.属性名; 或 p.方法名();

1) 在构造函数中,this指代的就是创建的这个对象

这也是为什么在构造函数中要使用this.属性名来书写了

2) 在对象中,属性和方法的书写格式为: 属性名 : "值"; 或 方法名 : function (); //属性与属性或方法与方法之间

都以,隔开

在构造函数中,书写格式为: this.属性名 = "值"; 或 this.方法名 = function (); //每个属性之间以;隔开

构造函数 析构函数 拷贝构造函数 ~~~~~~~~~~构造函数

(一)构造函数

构造函数的作用:实现对数据成员函数的初始化。(因为在声明类时直接赋值是不允许的)。

1.构造函数的使用:

①:没有返回值,没有类型,只是对 对象  进行初始化;

②:构造函数不需要用户调用,也不能被用户调用;系统会自动执行且只执行一次,一般声明为public;

③:可以用类对象初始化另一个对象,例:

rectangle t1;   ///建立对象t1,同时系统会调用构造函数t1.rectangle()
rectangle t2=t1;///建立对象t2,且将t2初始化为t1;

使用的样式:

class rectangle
{
private:
    int l,w;
public:
    rectangle(int a,int b):l(a),w(b){}///构造函数且利用初始化列表进行初始化
};

在类中定义了构造函数 rectangle,它和所在的类同名。在建立对象时自动执行构造函数,根据构造函数rectangle()的定义是将a和b分别赋给 l 和 w ,同样可以在类外定义构造函数,但要加上域限定符"::",比如

class rectangle
{
private:
    int l,w;
public:
    rectangle();///在类中声明构造函数
}
rectangle::rectangle(int a,int b):l(a),w(b){}///构造函数且利用参数初始化列表进行初始化

 

 2.构造函数的类别

①:带参数的构造函数:在调用不同对象时,实现对不同对象赋予不同的初值。

一般形式:

构造函数名(类型1 形参1 ,类型2,形参2)

简例:求给定长和宽的矩形面积,长m,宽n。

#include<iostream>
using namespace std;

class rectangle
{
private:
    int len;
    int wid;
public:
    rectangle(int a,int b);
  //rectangle(int,int);
int area(); }; rectangle::rectangle(int a,int b):len(a),wid(b){} int rectangle::area() { return len*wid; } int main() { int m,n; while(cin>>m>>n){ rectangle A(m,n); cout<<"The rectangle‘s area is:"<<A.area()<<"."<<endl; } return 0; }

 

② 不带参数的

#include<iostream>
using namespace std;

class rectangle
{
private:
    int len;
    int wid;
public:
    rectangle();///声明一个不带形参的构造函数
    rectangle(int a,int b):len(a),wid(b){}///定义一个有参的构造函数
    int area();
};

rectangle::rectangle()
{
    len=10;
    wid=10;
}

int rectangle::area()
{
    return len*wid;
}

int main()
{
    rectangle c;
    cout<<"The rectangle‘s area is:"<<c.area()<<"."<<endl;
    rectangle b(1,2);//传参改变初始化值
    cout<<"The rectangle‘s area is:"<<b.area()<<"."<<endl;

    return 0;
}

 

③含有默认参数的构造函数(本人感觉是以上两种的合体,更好用

简例:求一个长方体的体积,已知长宽高

#include<iostream>
using namespace std;
class cft
{
private:
    int len;
    int wid;
    int hei;
public:

    cft(int a=10,int b=10,int c=10):len(a),wid(b),hei(c){}
    int volum();
};

int cft::volum()
{
    return len*wid*hei;
}

int main()
{
    cft c;///一个参数没变
    cout<<"The cft‘s volum is:"<<c.volum()<<"."<<endl;
    cft b(1,2);///改变两个参数
    cout<<"The cft‘s volum is:"<<b.volum()<<"."<<endl;
    cft d(4,5,6);///三个参数都改变
    cout<<"The cft‘s volum is:"<<d.volum()<<"."<<endl;
    return 0;
}

 

以上是关于构造函数的主要内容,如果未能解决你的问题,请参考以下文章

静态构造函数、内部构造函数和公共构造函数有啥区别?

Kotlin类的初始化 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数中定义成员属性 | 次构造函数 | 构造函数默认参数 )

php构造函数的PHP 5 构造函数和析构函数

常见的构造函数类型

构造函数 析构函数 拷贝构造函数 ~~~~~~~~~~构造函数

C# 构造函数总结