构造函数带有参数的构造函数构造函数可以根据需要定义参数一个类中可以存在多个重载的构造函数构造函数的重载遵循 C++ 重载规则class Test{public: Test(int v) { // use v to initialize member. }};友情提示对象定义和对象声明不同对象定义 - 申请对象的空间并调用构造函数对象声明 - 告诉编译器存在这样一个对象Test t; // 定义对象并调用构造函数int main(){ extern Test t; // 告诉编译器存在名为 t 的 Test 对象 return 0;}构造函数的自动调用class Test{public: Test() { }; Test(int v) { };};int main(){ Test t; // 调用 Test() Test t1(1); // 调用 Test(int v) Test t2 = 2; // 调用 Test(int v) return 0;}编程实验: 带参数的构造函数#include <stdio.h>class Test{public: Test() { printf(“Test()\n”); }; Test(int v) { printf(“Test(int v), v = %d\n”, v); };};int main(){ Test t; // 调用 Test() Test t1(1); // 调用 Test(int v) Test t2 = 2; // 调用 Test(int v) int i(100); printf(“i = %d\n”, i); return 0;}输出:Test()Test(int v), v = 1Test(int v), v = 2i = 100构造函数的调用一般情况下,构造函数在定义对象时被自动调用一些特殊情况下,需要手工调用构造函数如何创建一个对象数组?编程实验: 构造函数的手动调用#include <stdio.h>class Test{private: int m_value;public: Test() { printf(“Test()\n”); m_value = 0; }; Test(int v) { printf(“Test(int v), v = %d\n”, v); m_value = v; }; int getValue() { return m_value; }};int main(){ Test ta[3] = {Test(), Test(1), Test(2)}; for(int i=0; i<3; i++) { printf(“ta[%d].getValue = %d\n”, i, ta[i].getValue()); } Test t = Test(100); printf(“t.getValue() = %d\n”, t.getValue()); return 0;}输出:Test()Test(int v), v = 1Test(int v), v = 2ta[0].getValue = 0ta[1].getValue = 1ta[2].getValue = 2Test(int v), v = 100t.getValue() = 100小实例需求: 开发一个数组类解决原生数组的安全性问题提供函数获取数组长度提供函数获取数组元素提供函数设置数组元素编程实验: 数组类的实现IntArray.h#ifndef INTARRAY_H#define _INTARRAY_H_class IntArray{private: int m_length; int* m_pointer;public: IntArray(int len); int length(); bool get(int index, int& value); bool set(int index, int value); void free();};#endifIntArray.cpp#include “IntArray.h"IntArray::IntArray(int len){ m_pointer = new int[len]; for(int i=0; i<len; i++) { m_pointer[i] = 0; } m_length = len;}int IntArray::length(){ return m_length;}bool IntArray::get(int index, int& value){ bool ret = (index >= 0) && (index < length()); if( ret ) { value = m_pointer[index]; } return ret;}bool IntArray::set(int index, int value){ bool ret = (index >= 0) && (index < length()); if( ret ) { m_pointer[index] = value; } return ret;}void IntArray::free(){ delete[] m_pointer;}main.cpp#include <stdio.h>#include “IntArray.h"int main(){ IntArray a(5); for(int i=0; i<a.length(); i++) { a.set(i, i+1); } for(int i=0; i<a.length(); i++) { int value = 0; if( a.get(i, value) ) { printf(“a[%d] = %d\n”, i, value); } } a.free(); return 0;}输出:a[0] = 1a[1] = 2a[2] = 3a[3] = 4a[4] = 5小结构造函数可以根据需要定义参数构造函数之间可以存在重载关系构造函数遵循 C++ 中重载函数的规则对象定义时会触发构造函数的调用在一些情况下可以手动调用构造函数以上内容参考狄泰软件学院系列课程,请大家保护原创!