前言
本节课是对类中的函数做介绍:构造函数
提示:以下是本篇文章正文内容,下面案例可供参考
一、构造函数
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; }