构造函数
构造函数:是一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用,而是在创建对象时自动执行。
#include<iostream>
#include<string>
using namespace std;
class Student{
private:
string m_name;
int m_age;
float m_score;
public:
//声明构造函数
Student(string name, int age, float score);
//声明普通成员函数
void show();
};
//定义构造函数
Student::Student(string name, int age, float score){
m_name = name;
m_age = age;
m_score = score;
}
//定义普通成员函数
void Student::show(){
cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
}
int main(){
//创建对象时向构造函数传参
Student stu("小明", 15, 92.5);
stu.show();
Student *pstu = new Student("小花", 16, 98);
pstu -> show();
return 0;
}
/*运行结果*/
小明的年龄是15,成绩是92.5
小花的年龄是16,成绩是98
构造函数必须是public属性的,否则创建对象时无法调用。并且构造函数没有返回值。
构造函数的重载
一个类可以有多个重载的构造函数,创建对象时根据传递的实参来判断调用哪一个构造函数。
构造函数的调用是强制性的,创建对象时只有一个构造函数会被调用。
#include<iostream>
#include<string>
using namespace std;
class Student{
private:
string m_name;
int m_age;
float m_score;
public:
//声明构造函数
Student();
Student(string name, int age, float score);
//声明普通成员函数
void show();
};
//定义构造函数
Student::Student()
{
m_name = "";
m_age = 0;
m_score = 0.0;
}
Student::Student(string name, int age, float score){
m_name = name;
m_age = age;
m_score = score;
}
//定义普通成员函数
void Student::show(){
cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
}
int main(){
//创建对象时向构造函数传参
Student stu("小明", 15, 92.5);
stu.show();
Student *pstu = new Student();
pstu -> show();
return 0;
}
/*运行结果*/
小明的年龄是15,成绩是92.5
的年龄是0,成绩是0
默认构造函数
如果用户自己没有定义构造函数,那么编译器会自动生成一个默认的构造函数。这个构造函数没有形参,也不执行任何操作。
一个类必须有构造函数,要么用户自己定义,要么编译器自动生成。
构造函数初始化列表
构造函数初始化列表并没有效率上的优势,仅仅是书写方便。
对象在栈上分配内存,成员变量的初始值是不确定的。
#include<iostream>
#include<string>
using namespace std;
class Student{
private:
string m_name;
int m_age;
float m_score;
public:
//声明构造函数
Student(string name, int age, float score);
//声明普通成员函数
void show();
};
//采用初始化列表
Student::Student(string name, int age, float score):m_name(name), m_age(age), m_score(score){}
//定义普通成员函数
void Student::show(){
cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
}
int main(){
//创建对象时向构造函数传参
Student stu("小明", 15, 92.5);
stu.show();
return 0;
}
初始化const成员变量
初始化const成员变量的唯一方法就是使用初始化列表。