构造函数
构造函数,跟类同名,是在类里面一定存在的,可以对成员变量在类内进行赋值,
一定是public,
可以重载
# include <iostream>
using namespace std;
class Student
{
private:
char *m_name;
int m_age;
float m_score;
public:
Student();//构造函数,可以对成员变量在类内进行赋值,其一定是public
void show();
};
Student::Student()
{
m_name = "小明";
m_age = 16;
m_score= 92.6;
}
void Student::show()
{
cout <<m_name<<endl;
cout <<m_age<<endl;
cout <<m_score<<endl;
}
int main()
{
Student stu;
stu.show();
system("pause");
return 0;
}
构造函数的重载
# include <iostream>
using namespace std;
class Student
{
private:
char *m_name;
int m_age;
float m_score;
public:
Student();//构造函数,可以对成员变量在类内进行赋值,其一定是public,可重载
Student(char *name);
Student(char *name, float score);
void show();
};
Student::Student()
{
m_name = "小明";
m_age = 16;
m_score= 92.6;
}
Student::Student(char *name)
{
m_name =name;
}
Student::Student(char *name, float score)
{
m_name = name;
m_score = score;
}
void Student::show()
{
cout <<m_name<<endl;
cout <<m_age<<endl;
cout <<m_score<<endl;
}
int main()
{
Student stu;
stu.show();
cout<<"-------------------"<<endl;
Student stu1("小红");
stu1.show();
cout<<"-------------------"<<endl;
Student stu2("小鹏", 88.5);
stu2.show();
cout<<"-------------------"<<endl;
system("pause");
return 0;
}
//输出:
小明
16
92.6
-------------------
小红
-858993460
-1.07374e+008
-------------------
小鹏
-858993460
88.5
-------------------
初始化列表
作用域+函数名+(参数列表):成员变量1(参数1),成员变量2(参数2)
Student::Student(char *name, int age, float score):m_name(name),m_age(age),m_score(score)
{
}
初始化列表的顺序只与参数列表的顺序有关
析构函数
析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。
new可以执行构造函数,delete可以执行析构函数
而malloc和free并不会执行构造和析构。
#include <iostream>
using namespace std;
class Student
{
public:
char *m_name;
float m_score;
public:
Student();//构造函数
~Student();//析构函数
};
Student::Student()
{
m_name = new char[10];
for (int i = 0; i< 5;i++)
{
m_name[i] = i+'a';
}
m_name[6] = '\0';
}
Student::~Student()//释放开辟的资源
{
if (m_name != NULL)
{
delete []m_name;
}
}
int main()
{
Student *pStu = new Student;
cout<<pStu->m_name<<endl;
char *str = pStu->m_name;
delete pStu;//此步执行析构函数,释放资源
cout<<str<<endl;
system("pause");
return 0;
}