博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++语言基础(4)-构造函数和析构函数
阅读量:5977 次
发布时间:2019-06-20

本文共 3180 字,大约阅读时间需要 10 分钟。

 

一.构造函数

类似于java,C++中也有构造函数的概念,相关用法如下:

1.1 构造函数的定义

#include 
using namespace std;class Student{private: char *m_name; int m_age; float m_score;public: //声明构造函数 Student(char *name, int age, float score); //声明普通成员函数 void show();};//定义构造函数Student::Student(char *name, int age, float score){ m_name = name; m_age = age; m_score = score;}//定义普通成员函数void Student::show(){ cout<
<<"的年龄是"<
<<",成绩是"<
<
show(); return 0;}

运行结果:

小明的年龄是15,成绩是92.5

李华的年龄是16,成绩是96

1.2 构造函数的重载

构造函数同样也支持重载操作:

#include 
using namespace std;class Student{private: char *m_name; int m_age; float m_score;public: Student(); Student(char *name, int age, float score); void setname(char *name); void setage(int age); void setscore(float score); void show();};Student::Student(){ m_name = NULL; m_age = 0; m_score = 0.0;}Student::Student(char *name, int age, float score){ m_name = name; m_age = age; m_score = score;}void Student::setname(char *name){ m_name = name;}void Student::setage(int age){ m_age = age;}void Student::setscore(float score){ m_score = score;}void Student::show(){ if(m_name == NULL || m_age <= 0){ cout<<"成员变量还未初始化"<
show(); pstu -> setname("李华"); pstu -> setage(16); pstu -> setscore(96); pstu -> show(); return 0;}

运行结果:

小明的年龄是15,成绩是92.5

成员变量还未初始化
李华的年龄是16,成绩是96

1.3 默认构造函数

类似于java,如果用户自己没有定义构造函数,那么编译器会自动生成一个默认的构造函数,只是这个构造函数的函数体是空的。

注意:调用没有参数的构造函数也可以省略括号。

Student *stu  = new Student;

Student *stu = new Student();

以上两种写法是等价的。

1.4 构造函数的参数初始化表

构造函数的主要目的是用于对成员变量进行初始化, 为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用参数初始化表。具体写法如下:

#include 
using namespace std;class Student{private: char *m_name; int m_age; float m_score;public: Student(char *name, int age, float score); void show();};//采用参数初始化表Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){ //TODO:}void Student::show(){ cout<
<<"的年龄是"<
<<",成绩是"<
<
show(); return 0;}

运行结果:

小明的年龄是15,成绩是92.5

李华的年龄是16,成绩是96

1.5 使用参数初始化表来初始化const成员变量

参数初始化表还有一个很重要的作用,那就是初始化 const 成员变量。初始化 const 成员变量的唯一方法就是使用参数初始化表。例:

class VLA {private:    const int m_len;    int *m_arr;public:    VLA(int len);};VLA::VLA(int len):m_len(len) {    m_arr = new int[len];}

二.析构函数

创建对象时系统会自动调用构造函数进行初始化工作,同样,销毁对象时系统也会自动调用一个函数来进行清理工作,例如释放分配的内存、关闭打开的文件等,这个函数就是析构函数

析构函数(Destructor)也是一种特殊的成员函数,没有返回值,不需要程序员显式调用(程序员也没法显式调用),而是在销毁对象时自动执行。构造函数的名字和类名相同,而析构函数的名字是在类名前面加一个~符号。

注意:析构函数没有参数,不能被重载,因此一个类只能有一个析构函数。如果用户没有定义,编译器会自动生成一个默认的析构函数。

class VLA {public:    VLA(int len);    ~VLA(); // 析构函数private:    const int m_len;    int *m_arr;};VLA::VLA(int len):m_len(len) { // 构造函数初始化    if (len > 0) {m_arrz = new int[len];};    else {m_arr = NULL;};}VLA::~VLA() {    delete []m_arr; // 在析构函数中释放堆区申请的内存}

C++ 中的 new 和 delete 分别用来分配和释放内存,它们与C语言中 malloc()、free() 最大的一个不同之处在于:用 new 分配内存时会调用构造函数,用 delete 释放内存时会调用析构函数。构造函数和析构函数对于类来说是不可或缺的,所以在C++中我们非常鼓励使用 new 和 delete。

 

转载地址:http://aesox.baihongyu.com/

你可能感兴趣的文章
【沟通之道】头脑风暴-女人的心思你别猜
查看>>
redux-form(V7.4.2)笔记(一)
查看>>
钱趣多风控新举措:源头选择与物理隔离
查看>>
puppet最新源码包安装学习笔记
查看>>
烂泥:kickstart无人值守安装CentOS6.5
查看>>
Windows Phone 8 开发资源汇总
查看>>
互联网趋势关键词:交流,为价值付费,资源整合
查看>>
阿里钉钉,马云旗下的又一个千亿美金产品?
查看>>
Oracle 11gR2学习之三(创建用户及表空间、修改字符集和Oracle开机启动)
查看>>
熟练掌握Word2003中的突出显示功能
查看>>
编码过程中的问题总结
查看>>
网页与APP中那些优美的登陆表单
查看>>
快速幂取模模板
查看>>
Git:配置
查看>>
神经系统知识普及
查看>>
Spring可扩展Schema标签
查看>>
c++ STL unique , unique_copy函数
查看>>
函数模板的使用说明
查看>>
http://miicaa.yopwork.com/help/overall/
查看>>
浅谈关于特征选择算法与Relief的实现
查看>>