C++ 类与对象探秘---结构体实现类

0.简介

在C++中,class和struct几乎没有区别,非要说有区别,就是默认访问权限的区别,class默认私有,struct默认公有,这回主要通过C语言的结构体来了解一下C++类和对象的一些原理。

1.struct与class的普通成员函数

结构体中,可以放变量,还有函数声明,这里设定不将函数声明写在结构体中。

//演示类1
struct Animal
{
	//名字
	string name;
};
void print(Animal* THIS)
{
	cout << THIS->name << endl;
}

//演示类2
class Animal2
{
public:
	string name;
	void print()
	{
		cout << this->name << endl;
	}
};

上面这段代码,我们发现类和结构体的print函数除了参数不同,内部的代码几乎一样,这里我们可以理解为,类内成员函数会有一个隐藏的this指针,这个指针指向自身,在调用的时候会将其传入函数,类似如下代码。

	Animal anim;
	anim.name = "pig";
	print(&anim);

	Animal2 anim2;
	anim2.name = "sheep";
	anim2.print();

这样一来就更加明确了,上下两段代码的实际操作是一样,只不过写法不同。

2.静态成员函数

//演示类2
class Animal2
{
public:
	string name;
	void print()
	{
		cout << this->name << endl;
	}
	static void run()
	{
		cout << this->name <<"run"<

上面代码的run函数会编译报错。

其实实际报错原因就和如下代码一样,函数参数中根本没有THIS这个参数,自然报错,那么静态函数在类中是不会有this指针的,那么就无法访问到类内成员,实际上,在类内使用成员可以不必用this->访问,因为编译器会自动把this加上去,或者理解为编译器会自动处理好this指针的省略用法。

//演示类1
struct Animal
{
	//名字
	string name;
};
void print(Animal* THIS)
{
	cout << THIS->name << endl;
}

void run()
{
	cout << THIS->name <<"run"<< endl;
}

 

你可能感兴趣的:(C++语言,C++)