草履虫也能懂得c++学习第二天(类与对象上)

类的定义

类定义格式

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:
// 为了区分成员变量,⼀般习惯上成员变量
// 会加⼀个特殊标识,如_ 或者 m开头
int _year; // year_ m_year
int _month;
int _day;
};
int main()
{
Date d;
d.Init(2024, 3, 31);
return 0;
}
#include<iostream>
using namespace std;
// C++升级struct升级成了类
// 1、类⾥⾯可以定义函数
// 2、struct名称就可以代表类型
// C++兼容C中struct的⽤法
typedef struct ListNodeC
{
struct ListNodeC* next;
int val;
}LTNode;
// 不再需要typedef,ListNodeCPP就可以代表类型
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指针。
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值