类的定义
类定义格式
class是定义类的关键字,Stack是类的名字,{}里面是类的主体,
类的内容叫做成员。类中的变量称作成员变量,类中的函数称作成
员函数。
为了区分成员变量,一般在成员变量前加_或者是m_。
c++中struct也可以定义类,和c最大的区别是可以定义函数。
定义在类里的函数默认inline。
#include<iostream>
using namespace std;
class Stack
{ p
ublic:
void Init(int n = 4)
{
array = (int*)malloc(sizeof(int) * n);
if (nullptr == array)
{
perror("malloc申请空间失败");
return;
} c
apacity = n;
top = 0;
} v
oid Push(int x)
{
array[top++] = x;
}
int Top()
{
assert(top > 0);
return array[top - 1];
} v
oid Destroy()
{
free(array);
array = nullptr;
top = capacity = 0;
}
private:
int* array;
size_t capacity;
size_t top;
};
int main()
{
Stack st;
st.Init();
st.Push(1);
st.Push(2);
cout << st.Top() << endl;
st.Destroy();
return 0;
}
class Date
{ p
ublic:
void Init(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Date d;
d.Init(2024, 3, 31);
return 0;
}
#include<iostream>
using namespace std;
typedef struct ListNodeC
{
struct ListNodeC* next;
int val;
}LTNode;
struct ListNodeCPP
{
void Init(int x)
{
next = nullptr;
val = x;
} L
istNodeCPP* next;
int val;
};
int main()
{
return 0;
}
访问限定符
c++通过封装的方式,将对象的属性和方法结合在一起,在通过访
问限定符将接口选择性的提供给用户
public修饰的成员在类外可被直接访问,protected和private
修饰的成员不能被直接访问,目前可以认为protected和private
是一样的,之后讲到继承才能体现出区别。
访问限定符的范围一直到下一个访问限定符或}
class默认private,struct默认public。
类域
类域是定义了一个新的作用域,影响的是编译的查找规则。
实例化
实例化概念
实例化是类在内存中开辟对象的过程
类是一种抽象的概念,一种模型,并不开辟空间,可以理解成造房
子的图纸,图纸住不了人,根据图纸造出的房子,才能住人,而
造房子的过程就是实例化。
对象大小
sizeof中类的大小如何计算,首先我们只计算成员变量的大小,不
计算成员函数,因为成员函数储存在公共区域,只有一份,倘若
每次实例化都实例化函数,会造成空间的浪费,逼近==毕竟函数
都是一样的--。而成员变量所占内存大小的计算遵守对齐规则。
this指针
同一个成员函数,不同的对象调用,函数该怎么区分对象呢?
c++成员函数的第一个形参默认存在一个隐藏的this指针,写作
Stack * const this
成员函数的成员变量都是用this指针访问的
成员函数的实参和形参不能出现this指针,编译器会隐藏,但是
可以在函数体中使用this指针。