6-1 构造函数讲解
上图中:
栈区的特点:内存由系统自动进行控制,分配和回收都不需要程序员关心;
堆区的特点:需要程序员手动分配和回收;
1、实例化之前不会占堆或栈的内存;
2、实例化之后(上图),每个对象都会在栈中开辟一段内存,用来存储各自的数据;但它们是不同的变量,占据着不同的内存;
3、实例化之后,若不进行初始化,则不能对其进行正确的操作;
逻辑代码只编译出一份在代码区,当需要的时候谁需要谁调用(找到相应的代码入口就可以执行程序);
上图的解决办法:构造函数
6-2 构造函数代码演示
要求:
Teacher.h:
#include<string>
using namespace std;
class Teacher
{
public:
Teacher();
Teacher(string name,int age=20);//可以初始化参数;但不能全部参数都初始化,否则当构造不写参数时,和无参的一样,编译无法区分所以错误;
void setName(string _name);
string getName();
void setAge(int _age);
int getAge();
private:
string m_strName;
int m_iage;
};
Teacher.cpp:
#include"Teacher.h"
#include<iostream>
#include<string>
using namespace std;
Teacher::Teacher()
{
m_strName="Jim";
m_iage=5;
cout<<"无参构造"<<endl;
}
Teacher::Teacher(string name,int age)
{
m_strName=name;
m_iage=age;
cout<<"有参构造"<<endl;
}
void Teacher::setName(string _name)
{
m_strName=_name;
}
string Teacher::getName()
{
return m_strName;
}
void Teacher::setAge(int _age)
{
m_iage=_age;
}
int Teacher::getAge()
{
return m_iage;
}
demo.cpp:
#include<iostream>
#include<stdlib.h>
#include<string>
#include "Teacher.h"
using namespace std;
int main()
{
Teacher a;//调用无参构造函数的实例化
Teacher b("fantic",21);//调用有参构造函数的实例化
Teacher c("james");
cout<<a.getName()<<" "<<a.getAge()<<endl;
cout<<b.getName()<<" "<<b.getAge()<<endl;
cout<<c.getName()<<" "<<c.getAge()<<endl;
system("pause");
return 0;
}
输出结果:
无参构造
有参构造
有参构造
Jim 5
fantic 21
james 20
请按任意键继续. . .