VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 6891|回复: 115

《实用C++》第33课 类的构造函数

  [复制链接]
51_avatar_middle
最佳答案
8 
online_admins 发表于 2018-4-19 01:30:23 | 显示全部楼层 |阅读模式
1、对象的初始化:
之前给大家讲解过变量的初始化,例如:
  1. int a = 0;
复制代码

那么类的对象呢?本身类是自从结构体发展过来的,所以之前结构体的初始化操作,类都支持
可以这样在定义的时候直接初始化,也可以先定义后初始化!
代码详见附件!

或者说我想在对象定义完了之后马上将其初始化一下,这个初始化可以说是给类的成员都赋上一些初值,但不是具体的值,不想让变量默认都是一些杂乱无章的没有什么规律的未初始化状态的数,例如:
《实用C++》第33课 类的构造函数

我们可以这样做:
  1. Student stud3;
  2. stud3.age = 0;
  3. stud3.num = 0;
  4. memset(stud3.name, 0, 50);
复制代码

这样做是完全可以的,但是我问你,这是你定义的一个对象,那么如果你定义了100个学生的对象呢?重复的代码你可能要写100次,用循环来做吗?非常麻烦,而且,你这种初始化的方式只能初始化public类型的成员,private类型的你是初始化不了的,有的会员可能会说,我自己封装一个函数,定义完对象之后调用下就可以了,代码详见附件!

这样做也是可以的,但是如果对象很多的话,也得循环调用 init 函数,如果这样定义个对象数组:
  1. Student stud_array[1000];
复制代码

那么你怎么为数组中的每个对象都调用 init 函数初始化呢?用个 for 循环?麻不麻烦啊?有什么更好的解决办法吗?C++的作者早就想到了。。。构造函数!

2、什么是构造函数?
构造函数就是解决上面的问题而存在的。构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来主动调用它,构造函数会在对象被建立时自动被调用的。作用就是用来处理对象的初始化操作。

3、构造函数的注意事项:
①、构造函数的名字必须与类名同名,不能随意命名,这样的话才能让编译器认为该函数是构造函数,而不是类的普通成员函数;
②、构造函数不具有任何类型,不返回任何值,连 void 都不是;
③、构造函数不需要用户调用,也不应该被用户调用,它是对象建立的时候自动被系统调用,用来初始化刚刚建立的对象的;
④、如果用户没有定义自己的类的构造函数,那么系统会自动生成一个默认的构造函数,只不过该构造函数的函数体是空的,也就是什么都不做。

4、为 Student 类实现构造函数:
代码详见附件!

接下来,我们来实例化一个类对象试试,具体演示见视频教程!

5、带参数的构造函数:
既然构造函数也是函数,那么这个构造函数是否可以带参数呢?答案是肯定的。
例如,Student 类不仅提供了默认的不带参数的构造函数,可以允许用户在定义类对象的时候自动调用,那么是否也可以提供一个带参数的构造函数,可以允许用户在定义类对象的时候就利用构造函数的参数来初始化对象的成员呢?我们来给大家演示下:
代码详见附件!

6、小作业:
有这么个需求,所有的在校生都必须有学号,所以能不能实现实例化一个Student对象之后,就要求输入学号,不存在一个没有学号的Student对象被实例化出来,大家明白了吗?也就是类似于 stud1 这样的对象是不允许存在的,因为其没有学号。大家课后试着做一下!


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
教程在线观看地址:
https://www.bilibili.com/video/av38388453/?p=35
MP4高清视频下载地址:链接:https://pan.baidu.com/s/1O8ESCI-Cqdq8EzS8PtbqqQ 提取码:5xx8
本节课件下载(回复后可见):
游客,如果您要查看本帖隐藏内容请回复

备注:VIP会员可免费下载本站所有资源(点击查看)
提示:通过购买VC驿站U盘打包(点击查看)也可加入终身Vip会员^_^




上一篇:《实用C++》第32课 this指针
下一篇:《实用C++》第34课 函数的重载与默认参数
69_avatar_middle
最佳答案
0 
在线会员 发表于 2018-4-19 08:04:36 | 显示全部楼层
第一个来支持SYC大神
78_avatar_middle
最佳答案
0 
在线会员 发表于 2018-4-19 09:12:35 | 显示全部楼层
又出新课程,谢谢分享
89_avatar_middle
最佳答案
0 
在线会员 发表于 2018-4-20 20:17:02 | 显示全部楼层
构造类,谢谢分享
98_avatar_middle
最佳答案
0 
在线会员 发表于 2018-4-21 09:13:13 | 显示全部楼层
谢谢提供
继续学习
74_avatar_middle
最佳答案
0 
在线会员 发表于 2018-4-21 09:45:07 | 显示全部楼层
看看                  
84_avatar_middle
最佳答案
0 
在线会员 发表于 2018-4-21 16:21:58 | 显示全部楼层
感谢分享。
82_avatar_middle
最佳答案
0 
在线会员 发表于 2018-4-22 10:53:30 | 显示全部楼层
感谢分享。
80_avatar_middle
最佳答案
0 
在线会员 发表于 2018-4-23 09:07:43 | 显示全部楼层
坚持学习!
43_avatar_middle
最佳答案
0 
online_vip 发表于 2018-4-23 10:21:34 | 显示全部楼层
打卡打卡,学习学习
08_avatar_middle
最佳答案
0 
在线会员 发表于 2018-4-23 23:17:35 | 显示全部楼层
老师更新了新课程!
55_avatar_middle
最佳答案
0 
在线会员 发表于 2018-4-24 16:03:10 | 显示全部楼层
类的构造函数《实用C++》第33课 类的构造函数
94_avatar_middle
最佳答案
0 
online_vip 发表于 2018-4-25 12:39:34 | 显示全部楼层
构造函数不具有任何类型,不返回任何值,连 void 都不是;
05_avatar_middle
最佳答案
0 
在线会员 发表于 2018-4-26 20:04:00 | 显示全部楼层
好好学习好好学习好好学习
82_avatar_middle
最佳答案
0 
在线会员 发表于 2018-4-29 09:19:49 | 显示全部楼层
一直很想学习C++
69_avatar_middle
最佳答案
0 
在线会员 发表于 2018-5-3 09:33:31 | 显示全部楼层
坚持学习!!!!
44_avatar_middle
最佳答案
0 
在线会员 发表于 2018-5-3 15:13:07 | 显示全部楼层
多谢楼主用心录制教程。
22_avatar_middle
最佳答案
0 
online_vip 发表于 2018-5-4 23:19:52 | 显示全部楼层
来学习啊《实用C++》第33课 类的构造函数
95_avatar_middle
最佳答案
0 
在线会员 发表于 2018-5-6 10:36:48 | 显示全部楼层
又出新课程,谢谢分享
75_avatar_middle
最佳答案
0 
在线会员 发表于 2018-5-6 10:52:10 | 显示全部楼层
感谢楼主分享!
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-11-22 09:16

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表