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"<<endl;
}
};
上面代码的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;
}