C++:构造函数

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
请按任意键继续. . .
发布了40 篇原创文章 · 获赞 56 · 访问量 2825

猜你喜欢

转载自blog.csdn.net/qq_42745340/article/details/104543858