类和对象总结

类的定义

类就是给一个=int之类的,不过自带一些方法

格式

class 名字
{
//里面都是方法还有变量
};

特点

正常情况下变量都是会加一特殊标识

定义在类⾯的成员函数默认为inline

C++中struct也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是struct中可以定义函数,⼀般情况下我们还是推荐⽤class定义类。

typedef之类的都可以继续使用,挺好用的,当然cpp里面直接用名字就可以

访问限定符

⼀种实现封装的⽅式,就是给予权限

public修饰的成员在类外可以直接被访问;protected和private修饰的成员在类外不能直接被访 问,protected和private是⼀样的,以后继承章节才能体现出他们的区别。

class定义成员没有被访问限定符修饰时默认为private,struct默认为public。

类域

#include<iostream>
using namespace std;
class Stack
{
public:
 // 成员函数 
 void Init(int n = 4);
8private:
 // 成员变量 
 int* array;
 size_t capacity;
 size_t top;
};
// 声明和定义分离,需要指定类域 
void Stack::Init(int n)
{
 array = (int*)malloc(sizeof(int) * n);
 if (nullptr == array)
 {
 perror("malloc申请空间失败");
 return;
 }
 capacity = n;
 top = 0;
}
int main()
{
 Stack st;
 st.Init();
 return 0;
}

类域影响的是编译的查找规则,程序中Init如果不指定类域Stack,那么编译器就把Init当成全 局函数

类定义了⼀个新的作⽤域,类的所有成员都在类的作⽤域中,在类体外定义成员时,需要使⽤::作 ⽤域操作符指明成员属于哪个类域。

对象=实例化

类就是给一个=int之类的,不过自带一些方法,而对象的实例化就是给出一个变量

变量自己储存,

内存对⻬规则

没有成员变量时需要有一个字节证明存在

this指针

原因:Date类中有Init与Print两个成员函数,函数体中没有关于不同对象的区分,那当d1调⽤Init和 Print函数时,该函数是如何知道应该访问的是d1对象还是d2对象呢?用于确定是哪一个

编译器编译后,类的成员函数默认都会在形参第⼀个位置,增加⼀个当前类类型的指针,叫做this 指针。

有const默认修饰

C++规定不能在实参和形参的位置显⽰的写this指针(编译时编译器会处理),但是可以在函数体内显 ⽰使⽤this指针

this指针储存在

首先先是不在对象里面,因为算内存时候就不会算,同时const是常变量,本质还是变量

栈:函数

堆:开辟内存,动态开辟

静态区:静态变量,全局变量

常量区域:常量

所以是栈,本质是一个形参,有些编译器是寄存器储存this

类的默认成员函数

⾯向对象三⼤特性

封装、继承、多态,下⾯的对⽐我们可以初步了解⼀下封装。

通过下⾯两份代码对⽐,我们发现C++实现Stack形态上还是发⽣了挺多的变化,底层和逻辑上没啥变 化。

• C++中数据和函数都放到了类⾥⾯,通过访问限定符进⾏了限制,不能再随意通过对象直接修改数 据,这是C++封装的⼀种体现,这个是最重要的变化。这⾥的封装的本质是⼀种更严格规范的管 理,避免出现乱访问修改的问题。当然封装不仅仅是这样的,我们后⾯还需要不断的去学习

。 • C++中有⼀些相对⽅便的语法,⽐如Init给的缺省参数会⽅便很多,成员函数每次不需要传对象地 址,因为this指针隐含的传递了,⽅便了很多,使⽤类型不再需要typedef⽤类名就很⽅便 •

在我们这个C++⼊⻔阶段实现的Stack看起来变了很多,但是实质上变化不⼤。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值