c++学习——(3)构造函数讲解

一.内存分区

1.内存简单分配

栈区:一个特点就是内存有系统来进行控制,无论是分配还是来进行回收都不需要程序员来关心。

堆区:需要程序员来申请和回收。

2.对象中数据的存储

      对象在实例化之前是不会占用内存的,但是实例化之后就会在栈中开辟出一段内存,用来存储各自的数据。实例化后不同的对象是不同的变量,占据着不同的内存。

      但是注意,逻辑代码只编译出了一份放在代码区,当需要的时候代码区的代码供所有的代码使用。

3.对象的初始化

举一个简单的例子:

对象初始化的分类:

为了避免初始化函数的误操作,比如忘记调用初始化函数和重复调用初始化函数,这都将给我们的程序造成灭顶之灾,于是就出现了构造函数

 

二.构造函数

1.构造函数的规则和特点:

    构造函数在对象实例化时会被自动调用,且仅被调用一次。

    构造函数与类同名。

    构造函数没有返回值(连void也不用写)。

    构造函数可以有多个重载形式。

    实例化对象时仅用到一个构造函数。

    当用户没有定义构造函数时,编译器会自动生成一个构造函数(但是这个构造函数没有做任何事情)

2.构造函数的定义

a.无参构造函数

b.有参构造函数

3.构造函数的重载

构造函数的重载比较简单只需要遵循重载的规则就好了。

下面我们就举一个例子,使用分文件类外定义的方法,这也是最好的方式。

main函数文件:

#include<iostream>
#include<stdlib.h>
#include<string>
#include"teacher.h"
using namespace std;

/****************************************************************/
/*自定义有参和无参构造函数
*数据成员:
*	名字
*	年龄
*成员函数
*	数据成员的封装函数
/****************************************************************/

int main(void)
{
	Teacher t1;
	Teacher t2("Merry",15);
	cout << t1.getName() << " " << t1.getAge() << endl;
	cout << t2.getName() << " " << t2.getAge() << endl;
	system("pause");
	return 0;

}



Teacher.h文件

#include<string>
using namespace std;

class Teacher
{
public:
	Teacher();
	Teacher(string _name, int _age);
	void setName(string _name);
	string getName();
	void setAge(int _age);
	int getAge();
public:
	string m_strName;
	int m_iAge;
};



Teacher.cpp文件

#include<iostream>
#include<stdlib.h>
#include<string>
#include "Teacher.h"
using namespace std;

Teacher::Teacher()
{
	m_strName = "jim";
	m_iAge = 5;
	cout << "Teacher()" << endl;
}

Teacher::Teacher(string _name, int _age)
{
	m_strName = _name;
	m_iAge = _age;
	cout << "Teacher(string _name,int _age)" << 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;
}


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值