首页 » 信息技术 »

C++之构造函数

2021年3月3日 / 10次阅读
CC++

C++在C基础上,抽象出了类和对象的概念,本文总结一点关于类和对象构造函数方面的细节。

1, 构造函数的函数名与类名一致

记住这一点,以后在看C++代码的时候,看到什么create,init之类的函数,都是不是构造函数,都是程序员自己拍脑袋定义的函数。

2, 默认的构造函数

构造函数有一个默认版本,即在程序员不显式定义任何构造函数的前提下,C++编译器会生成一个默认的构造函数,用于对象的初始化。

默认的构造函数没有参数!

3, 构造函数可以重载

函数重载是C++引入的特性,对于构造函数而言,依然也可以重载。(另一个C++引入区别于C的特性是,函数参数的默认值)

在有显式定义构造函数的情况下,就不再有默认的构造函数存在,所有的构造函数版本都是显式存在的。

4, 构造函数的调用

没有参数的构造函数,在创建对象的时候,不能使用圆括号,比如有一个AA对象:

AA a1();  // wrong

这样写,C++编译器会认为这是一个函数的申明。因此,对于没有参数的构造函数,可以这样:

AA a1;  // yes
AA a2{}; // yes

对于有参数的构造函数,可以写成类似函数调用的方式,因为参数的存在,C++可以分清这不是申明,同时,也可以使用{},比如有个类Student:

Student stu1{"xiaoa"};  // {} ok
stu1.show();
Student stu2("xiaob");  // () ok
stu2.show();

5, new的使用

C语言申请内存,使用malloc(配合free);C++在堆中创建对象的时候,就要使用new(配合delete)。

Student *pstu = new Student("xiaoc");
Student *pstu = new Student{"xiaoc"};

如果构造函数没有参数:

Student *stu1 = new Student;
Student *stu2 = new Student();  // right
Student *stu3 = new Student{};

在new的加持下,使用圆括号编译器也能够识别这是创建对象,而不是函数申明。

6, 构造函数必须是 public 属性的,否则创建对象时无法调用。

当然,设置为 private、protected 属性也不会报错,但是没有意义。

7, 构造函数的申明和定义,都没有返回值,不用写出void关键词。

本文链接:https://www.maixj.net/ict/c-gouzao-24415

相关文章

留言区


前一篇:
后一篇:
-->只要几分钟回答问卷,就能轻松赚现金!

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

go to top