C++面向对象(基础)

1.构造函数

用例实例化对象的时候调用的成员方法:
构造函数没有返回值,函数名与类名同名,参数没有规定(根据需要)
实例化对象的时候必须调用构造函数
一旦自己内有实现构造函数,编译器就会为我们自动默认生成一个构造函数
默认的构造函数就是没有参数的构造函数

示例如下:

class Person
{
private:
	char *_name;
	bool _sex;
	int _age;

public:
	//构造函数  函数名必须和类名同名
	Person(const char *name, bool sex, int age)
	{
		cout << "Person(const char *name, bool sex, int age)" << endl;
		_name = new char[strlen(name) + 1];
		strcpy_s(_name, strlen(name) + 1, name);
		_sex = sex;
		_age = age;
	}
	Person()   //系统默认自动生成没有参数的函数
	{
		_name = NULL;
		cout << "Person()" << endl;
	}

}

2.this指针

this指针:指向对象的指针
在成员方法调用的时候默认传入一个this指针
在成员方法申明/定义的地方,默认加上this指针参数
在成员方法中使用成员变量的地方加上this->

代码示例:

void eat(/*Person * const this*/)  //调用的时候默认传入一个this指针
{
	//this = NULL;
	cout << this->_name << "::::eat" << endl;	
}

3.拷贝构造函数

拷贝构造函数:
用已存在的相同类型的对象去构造新对象
如果不是自己拷贝,编译器则会自己默认生成一个拷贝构造函数
默认生成的拷贝构造函数只进行值的拷贝

代码示例如下:

Person(const Person& src)  //这里必须加一个&,让系统判定为传入的参数是指针
	{
		cout << "Person(Person& src)" << endl;
		//防止浅拷贝
		_name = new char[strlen(src._name) + 1];
		strcpy_s(_name, strlen(src._name) + 1, src._name);
		_sex = src._sex;
		_age = src._age;
	}

4.等号运算符重载函数

等号运算符重载函数:
用一个已经存在的对象赋值给另一个已经存在的对象
如果自己不实现,则编译器会自己默认生成一个浅拷贝的 =

注意:防止自赋值   防止内存泄漏   防止浅拷贝

代码示例如下:

Person& operator=(const Person& src)
	{
		cout << "=====" << endl;
		//防止自赋值
		if (this == &src)
		{
			return *this;
		}

		//防止内存泄漏
		if (NULL != _name)
			delete[]_name;

		//防止浅拷贝
		_name = new char[strlen(src._name) + 1];
		strcpy_s(_name, strlen(src._name) + 1, src._name);
		_sex = src._sex;
		_age = src._age;

		return *this;
	}

5.析构函数

在对象生命周期终止的时候,自动调用的成员方法
如果不自己定义析构函数,编译器就会自己生成析构函数

代码示例如下:

~Person()
	{
		cout << "~Person()" << endl;
		delete []_name;
		_name = NULL;
	}

备注:class的访问属性默认为private

          struct的访问属性为默认public

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值