【c++】类和对象 1

【c++】类和对象 1,第1张

【c++】类和对象 1
class  Person
{
public:
	char* _name;
	int _sex;
	int _age;
    void init(char* name, int age, int sex)
	{
		_sex = sex;
		_age = age;
		_name = new char[strlen(name) + 1];
		for (int i = 0; i < strlen(name) + 1; i++)
		{
			_name[i] = name[i];
		}
    void eat()
	{
		cout << "eat  eat  eat……" << endl;
	}

	void sleep()
	{
		cout << "sleep sleep sleep ……" << endl;
	}
	void show()
	{
		
		cout << "name:" << _name << endl;
		cout << "sex:" << _sex << endl;
		cout << "age:" << _age << endl;
	}

 }

以上便是用class创建的一个类 , 类中有成员变量和成员函数

this指针
int main()
{
 Person p1;
 p1.show();
 return 0;
}

我们在调用类中的函数时 ,是不用往里面写参数的 ,而这些函数也不带形参 ,那计算机是如何知道此时函数里的name,sex等是什么呢 ?

类中的函数在编译时系统会传类类型的this指针 ,用来指向这个类,而里面的参数都是被节引用的 ,我们可以在函数中直接用this指针 ,但不能改变 ,这个指针是const修饰的

void show()
	{
		this->eat();
		cout << "name:" << this->_name << endl;
		cout << "sex:" << _sex << endl;
		cout << "age:" << _age << endl;
	}

构造函数

构造函数是初始化类成员变量用的 ,对象构造的时候自动调用的函数 如果没有实现构造函数,编译器会自动生成一个默认构造函数---啥都不做 参数列表为空的构造函数为默认构造函数 一旦自己实现构造函数,编译器就不会自动生成了 构造函数可以重载 不能手动调用

class  Person
{
public:
	char* _name;
	int _sex;
	int _age;

	Person()
	{	
	}
	
	Person(char* name, int age, int sex)
	{
		_sex = sex;
		_age = age;
		_name = new char[strlen(name) + 1];
		for (int i = 0; i < strlen(name) + 1; i++)
		{
			_name[i] = name[i];
		}
	}
 }

析构函数

对象死亡的时候自动调用的函数 如果没有实现,编译器会自动给生成一个啥都不做的空析构函数 一旦实现,编译器就不会自动生成了 析构函数没有参数,不能重载

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

拷贝构造

在使用同类型的已存在的对象构造对象就是拷贝构造,会自动调用 如果没有实现,编译器会自动给生成一个浅拷贝的拷贝构造函数(浅拷贝是对指针做区分的,如果类中有指针成员变量,那么浅拷贝只是把指针存放的地址拷贝过去,这样我们最后就会对这个地址删除两次,所以如果有指针成员变量,我们需要自己写一个拷贝函数) 一旦实现,编译器就不会自动生成了

class  Person
{
  Person(const Person& src)
	{
		_age = src._age;
		_sex = src._sex;
		//_name = src._name;

		_name = new char[strlen(src._name) + 1];
		for (int i = 0; i < strlen(src._name) + 1; i++)
		{
			_name[i] = src._name[i];
		}
	}
}

int main()
{
   Person p1;
   Person p2(p1); //拷贝构造
   p2=p1  //赋值
}

这里要注意拷贝构造函数传的参数必须是引用 ,如果没有引用 ,那么就是把实参p1传给形参src 又是一个拷贝,会形成死递归。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5658922.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存