【C++】类的构造函数的基本介绍(A basic introduction to constructors of classes)

简介: 【C++】类的构造函数的基本介绍(A basic introduction to constructors of classes)

前言

本节课是对类中的函数做介绍:构造函数


提示:以下是本篇文章正文内容,下面案例可供参考

一、构造函数

1.构造函数的产生形式及作用

1.产生:

普通数据成员不能够在类内直接赋值,因为只有对象创建的时候才分配空间。那么数据如何赋初始值呢?可以定义一个成员函数,对成员统一赋值

class a
{
public:
  int c;
  void fun(int b)
  {
    c=b;
  }
}

2.形式:

类名(参数列表){}

注意:他没有返回值

class a
{
public:
  int c;
  a(int b)
  {
    c = b;
  }
};

除了没有返回值,他基本和普通的函数一模一样了,我们可以放心大胆的用。

3.作用

对数据成员赋初始值

2.函数的调用时机

我们在创建对象时及会调用

那么我们知道,创建类可以创建栈区对象也可以创建堆区对象

1.栈区调用时机

class a
{
public:
  int c;
  a()
  {
    c = 12;
  }
};
int main()
{
  a aa;
  return 0;
}

首先 我们在main函数中创建了一个a的栈区对象 他的构造函数调用时机是当代码创建了一个a栈区对象时,他就会立马调用构造函数

2.堆区调用时机

我们知道,创建堆区对象可以使用两种方式:malloc和new。

but!使用malloc 的方式是不会调用构造函数的,但是使用new会调用类中的构造函数

class a
{
public:
  int c;
  a()
  {
    c = 12;
  }
};
int main()
{
  a* aa = new a;//不会调用构造函数
  a* aaj = (a*)malloc(sizeof(a));//不会调用构造函数
  return 0;
}


3.构造函数的类型

1.默认构造函数

什么都不做,他没有参数,代码段也没有语句,but 必须要有这个东西

如下:

class C_l
{
public:
  C_1()
  {
  }
};

注意: 只要用户声明构造函数,默认的构造函数就没有了

2.无参数构造函数

class C_l
{
public:
  C_1()
  {
    //用户可以自己写代码在这里面,创建对象时就会执行里面的语句
    cout<<"hello world"<<endl;
  }
};

3.有参数的构造函数

class C_l
{
public:
  C_l(int a)
  {
    cout << a << endl;
  }
};

在有参数的构造函数中我们要注意创建对象时的传递参数。

类名 对象(参数);

类名 *对象 = new 类名(参数);

有参数的构造函数怎么传递参数:

  //类名 对象(参数);
  //类名 *对象 = new 类名(参数);
  //1.
  C_l c_l(12);
  //2.
  C_1 *c_2 = new C_l(13);

4.多个构造函数产生重载

class C_l
{
public:
  C_l(int a)
  {
    cout << a << endl;
  }
  C_l()
  {
    cout << "a" << endl;
  }
  C_l(double c)
  {
    cout << c << endl;
  }
};

不会重载的小伙伴可以去看看我之前的C++内容

4.成员函数的定义

意义:多文件

类内声明函数

class aa
{
public:
  void fun();
}

类外定义函数:

返回值 类名作用域 函数名(){}

void aa::fun()
{
  cout<<"你好"<<endl;
}
相关文章
|
21天前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
21 4
|
21天前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
19 4
|
21天前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
17 1
|
1月前
|
存储 编译器 C++
【C++类和对象(下)】——我与C++的不解之缘(五)
【C++类和对象(下)】——我与C++的不解之缘(五)
|
1月前
|
编译器 C++
【C++类和对象(中)】—— 我与C++的不解之缘(四)
【C++类和对象(中)】—— 我与C++的不解之缘(四)
|
1月前
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
51 1
|
22天前
|
存储 编译器 C语言
【C++打怪之路Lv3】-- 类和对象(上)
【C++打怪之路Lv3】-- 类和对象(上)
15 0
|
27天前
|
存储 编译器 C语言
深入计算机语言之C++:类与对象(上)
深入计算机语言之C++:类与对象(上)
|
1月前
|
存储 编译器 C语言
【C++类和对象(上)】—— 我与C++的不解之缘(三)
【C++类和对象(上)】—— 我与C++的不解之缘(三)
|
1月前
|
C语言 C++
C++番外篇——string类的实现
C++番外篇——string类的实现
19 0