介绍
- (1)构造函数的 作用
1.为成员变量初始化
2.分配资源
3.设置对象的初始状态(默认值)
注意事项
- (1)构造函数的 注意事项
1.构造函数 没有返回类型
2.构造函数 可以带参数
3.构造函数 可以形成重载
4.构造函数的 函数名 与 类名 相同
5.构造函数 不需要用户显示调用(实例化对象时会自动调用) (PS:每次实例化只调用一次)- (2)默认构造函数 注意事项
1.若一个 类 没有定义构造函数,会默认提供一个公有的 默认构造函数
2.默认构造函数 一定是无参的
3.无参的构造函数 不一定是 默认构造函数
4.若遇到 缺省函数重载 与 默认构造函数 在同一作用域会形成 调用不明- (3)初始化表构造函数的 注意事项
1.在构造函数中使用初始化表,指明类的成员变量如何初始化
2.初始化表需要实参与形参类型相同、数量相同。否则调用的是缺省构造函数来初始化
3.常成员变量必须在初始化表中显示初始化
4.参数初始化顺序与初始化表中变量顺序无关,只与成员变量在 类 中声明的顺序有关
笔记扩充
空构造函数占 1字节
空结构体占 1字节
string类 占 28字节
测试代码:
class a{};
struct b{};
int main()
{
cout << sizeof(a) << endl;
cout << sizeof(b) << endl;
string a;
cout << sizeof(a) << endl;
}
源码
#include<iostream>
#include<string>
using namespace std;
class Student
{
(3)默认构造函数
//Student()
//{
// cout << "默认构造函数" << endl;
//}
public:
//2.带参构造函数
Student(string Name, int Score, int Number)
{
N_Name = Name;
S_Score = Score;
N_Number = Number;
}
//6.缺省构造函数重载(此处会与 默认构造函数 形成 调用歧义)
Student(string Name = "lily",int Score = 130)
{
N_Name = Name;
S_Score = Score;
N_Number = 2;
}
//(3)初始化表
Student(int Score, int Number) :S_Score(Score), N_Number(Number)
{
cout << "初始化表成功" << endl;
}
//打印结果
void print()
{
cout << "名字:" << N_Name << "\n成绩:" << S_Score << "\n学号:" << N_Number << endl;
}
private:
string N_Name;
int S_Score;
int N_Number;
};
void main()
{
//调用带参构造函数
Student stu1("一航",100 ,1 );
stu1.print();
cout << endl;
//调用缺省构造函数
Student stu2("渔夫");
stu2.print();
cout << endl;
//调用初始化表构造函数
Student stu3(100,0);
system("pause");
}
运行结果
名字:一航
成绩:100
学号:1
名字:渔夫
成绩:130
学号:2
初始化表成功
请按任意键继续. . .