类
我嘞个豆,类可是太重要了,简直是重中之重
class为定义类的关键字,stack为类的名字,{}为类的主题
class stack
{
void add (int a,int b)
{
return a+b;
}//类的方法,成员函数
int _c;
int _d;//类的属性,成员变量
};
在成员变量前面一般会加一个特殊标识来区分成员变量
有点像C语言中的struct,结构体的用法
typedef struct list
{
int a;
int b;
};L
struct在C++中也可以定义类,C++中兼容C中的strcut的用法,同将struct升级为类,所以我们也可以这样
struct stack
{
void add (int a,int b)
{
return a+b;
}//类的方法,成员函数
int _c;
int _d;//类的属性,成员变量
};
struct和class都可以定义类,那么他们有什么区别呢
这就的讲到访问限定符
访问限定符
C++中,用类将对象的属性与方法结合在一起,通过访问限定符将其接口提供外部的用户使用
我们有三个访问限定符,public,private 和 protected
pubilc
修饰的成员在类外可以直接被访问,protected和private
修饰的成员在类外不能被直接访问
class定义成员没有被访问限定符修饰时默认为private
,struct默认为public
访问权限作用域从该访问限定符出现的位置到下一个访问限定符出现位置
类域
我们知道有全局域、局部域,还有命名空间,现在又出现了另外一个域,叫类域
类域就是类定义的一个新的作用域,在类体外定义成员的时候,需要用::
作用域操作符来指明成员在哪个空间
和命名空间的用法一致
实例化对象
用类类型在物理内存中创建对象的过程,成为类实例化出对象
类是一个抽象的概念,他像是一个房子的图纸,没有分配空间,实例化对象就像是在对着图纸建房子,直到我们实例化出对象的时候才会分配内存
对象的空间
在对象中,肯定包括成员变量,因为内成员变量储存需要空间,但是不包含成员函数
因为成员函数中的代码储存在一个单独的区域,调用的是他们的指针,但是不同的对象调用的指针都是一样的
所以为了节省空间,成员函数的指针不需要储存
当然如果对象中只有成员函数,还是会象征性分配一个字节来表示对象的存在
this指针
this指针是C++在函数调用方便的根本,他是怎么运行的呢
在我们用成员函数的时候,我们已知成员函数在对象中不用储存,那么我们调用成员函数时,他怎么知道他应该访问那个对象呢?
这就要说到this指针
class date
{
void init(int a,int b)
{
_a=a;
_b=b;
}
};
int _a;
int _b;
int main (){
datr d1;
d1.init(1,2);
}
这是一个普通的成员函数的调用,那么他怎么知道应该是访问的对象呢?
编译器编译的时候,类的成员函数会默认会在第一个形参的位置增加一个当前类的指针,叫做this指针
所以其实真实原形是这样的
class date
{
void init(date*const this, int a,int b)
{
this-> _a=a;
this-> _b=b;
}
};
int _a;
int _b;
int main (){
datr d1;
d1.init(1,2);
}
类的成员函数访问对象,本质是通过this指针访问的
const修饰指针是希望不修改指针本身
当然这是编译器的活,我们在真实使用中不能这么写,否则会报错