【C++第五课】---析构与构析上

来源:互联网 发布:p2p网络借贷监管政策 编辑:程序博客网 时间:2024/06/08 20:07

在C++中,一般定义一个对象之后,我们最好是能够将其初始化,使他有一个确定的初始状态,这样能避免很多不确定因素,那么在C++中是如何做的呢?

这时候就需要引入构造函数的概念了。


一、所谓构造函数

C++中的类可以定义和类名相同的特殊成员函数,这种函数就叫做构造函数。

注意:定义构造函数的时候可以有参数的,但是定义的构造函数不能有返回值的

但是,但是在构造函数中是可以有return语句的。

举个例子:

#include <iostream>using namespace std;class example{public:example(int m){x = y = m;}int print_value(void){cout<<"x = "<<x<<" y = "<<y<<endl;return 0;}private:int x;int y;};int main(int argc,char** argv){example exam1(1);example exam2 = 2;exam1.print_value();exam2.print_value();return 0;}


二、构造函数的调用

1.一般情况下C++编译器会自动构造函数

2.特殊情况下需要手动调用构造函数

举例如下:

#include <iostream>using namespace std;class example{public:example(int m){x = y = m;}int print_value(void){cout<<"x = "<<x<<" y = "<<y<<endl;return 0;}private:int x;int y;};int main(int argc,char** argv){example exam1(1);//自动调用example exam2 = 2;//自动调用example exam3 = example(3);//手动调用exam1.print_value();exam2.print_value();exam3.print_value();return 0;}


三、构造函数和成员函数都是可以重载的,重载规则相同。


四、两个特殊的构造函数

1.无参数构造函数

当类中没有定义构造函数时,,编译器默认提供一个无参 编译器默认提供一个无参
构造函数,,并且其函数体为空。

2.拷贝构造函数

当类中没有定义拷贝构造函数时,,编译器默认提供一个 编译器默认提供一个
拷贝构造函数,,简单的进行成员变量的值复制。不进行空间的开辟


一个实例:数组类的创建

main.cpp

#include <iostream>#include "array.h"using namespace std;int main(int argc, char** argv){ARRAY array1(5);//创建对象,并且初始化对象为5个元素for(int i = 0;i < 5; i ++){array1.Set_Data(i,-i);  //给数组赋值}for(int i = 0; i < 5; i ++){cout<<"i = "<<array1.Get_Data(i)<<endl;//打印数组的值}Destroy();//释放内存return 0;}

array.cpp

#include "array.h"ARRAY::ARRAY(int length){if(length < 0){length = 0;}m_length = length;m_space = new int[m_length];}ARRAY::ARRAY(const ARRAY& obj){m_length = obj.m_length;m_space = new int[m_length];for(int i = 0;i < m_length;i ++){m_space[i] = obj.m_space[i];}}int ARRAY::Get_Data(int index){return m_space[index];}void ARRAY::Set_Data(int index,int value){m_space[index] = value;}int ARRAY::Length(){return m_length;}void ARRAY::Destroy(){m_length = -1;delete[] m_space;}

array.h

#ifndef __ARRAY_H_#define __ARRAY_H_class ARRAY{public:ARRAY(int length);ARRAY(const ARRAY& obj);int Get_Data(int index);void Set_Data(int index,int value);int Length();void Destroy();private:int m_length;int* m_space;};#endif





原创粉丝点击