1.对象的定义
可以在内部定义变量还有函数,而其中的public是声明这里面的东西是共有的,可以调用也可以修改,但是private则是声明这里面的东西是私有的不可以被改变的,但是在类里面共有的是可以使用私有的。
在对象中默认都是私有的,在结构体中则默认都是公有的。
2.对象在外部进行定义
c++是支持对象在外部进行定义的,例如图中在外部对init进行定义。
3.对象进行sizeof时只计算变量的大小,不会计算函数,而且符合位段的规则。
如果每次都要保存一个函数指针那不是很浪费空间吗,那是如何调用函数的呢?
实际上调用的都是同一个函数,而找每个函数指针的时候实际上是在链接的时候去找对应的函数地址,再直接去call那个地址。(这个地址是保存在栈的,用ecx去存储)
4.this指针(对象*const this)
按上面那么说,函数也是一样的,私有的里面还是一样的,那是如何保证每个对象是不一样的呢?
实际上每次传入参数的时候都是有个隐藏的this指针(在第一个参数那个位置),但是你传的时候不能传(正常应该是(&date1,year,month,data),这样是不是很烦,直接让编译器传不爽吗?所以不让你传直接让编译器去传),而在对象中却可以显示出来。
5.this指针运用实例
void* a = nullptr;
void* b=*a;
这样的代码进行了空指针的解引用,是明确的语法错误。
class test{
public:
void test_() {
printf("test");
}
};
int main() {
test* p = nullptr;
p->test_();
return 0;
}
但是如果是这样的代码,那就可以正常运行,为什么呢?
因为this指针是隐式传过去的,当你在对象中没有用类似this->他不知道你是不是空指针,所以不会直接抛出报错。