c++入门:类和对象

目录

一.面向对象编程:类和对象

二.封装

三 .this指针


一.面向对象编程:类和对象

        在c语言中,我们如何实现一个顺序表或者是链表?

        首先要声明一个结构体类型作为顺序表或链表,结构体中根据需要有数据、个数等成员,再分别写出对应的函数接口。而在c++中,把一个结构体作为一个类,再把所有与之有关的函数定义放在结构体内,作为一种自定义类型,而自定义类型声明出来的变量就是一个对象,这叫对象实例化

        举个例子:外卖程序需要有三个群体,一个是卖家,一个是顾客,一个是骑手;这三个群体每个就是一个类,骑手需要设计接单、送餐的程序,卖家需要设计接单、出餐的程序,顾客需要设计下单、收餐的程序,这些程序都被封装成函数,写在各自的类里面。每个顾客、骑手、卖家都是类的一个实体化对象。我们每个人操作只需要执行自己群体的程序,也就是不像c语言设计链表所有函数都是全局的,任意调用。程序猿在设计时只需要定义这个类需要的成员变量以及封装好对应的函数就行了。这就是面向对象编程(OOP),c语言就是面向过程编程(POP)。所以说,世界就是一个巨大的c++。

class classname {
	//类体:成员变量和成员函数组成

};//这里注意一定要加分号

        class是类的关键字,classname是类的名字,{}内的为主体,注意{}后面的分号不能忽略;

        类中内容是类的成员,类中的变量成为类的属性或者成员变量,类中的函数称为类的方法或者成员函数

        结构体struct也可以作为类。

        类的成员有不同的访问权限,分为(private)私有protected(保护)public(公有)

保护可以看作是私有。class是默认私有,struct是默认公有。有以下几点要求:

  1. public修饰的成员在类外可以直接被访问
  2. protected和private修饰的成员在类外不能直接被访问(只能在类内部访问)。
  3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止。
  4. 如果后面没有访问限定符,作用域就到了即类结束。
  5. 一般情况下成员变量私有,成员函数公有。

成员函数的声明和定义分离:

二.封装

封装的含义:

  1. c++将方法和数据都放到类里面
  2. c++使用访问限定符对成员进行限制,想给你访问时公有,不想给你访问是私有

封装的本质就是一种管控

date d1;//对象实例化
//date::year++;//不能,因为这只是声明
d1._year++;

和结构体声明一样,类的声明也不开空间,那对类的类型取sizeof是多少呢?就以这个顺序表为例:

class SequeList {
public:
	void Init(int n = 4);
	void push(int x);
private:
	int* a;
	int capacity;
	int top;
};

计算结果是16,好像并没有给函数开辟空间。事实上所有对象的成员函数都写在代码段的一个公共区域,且如果没有成员变量,类的大小就是1,意义是标识对象存在过。其他的就按照结构体内存对齐计算大小。

三 .this指针

        类的每个成员函数都有一个隐藏的第一个参数,就是this指针。作用类似于实现链表时创建一个链表并取地址传给函数作为参数。目的是使每个对象拥有自己的数据成员,但共同享有处理这些数据的代码(代码段)。

 

特点:

  1. 形参和实参的位置,不能显示写
  2. 函数内部可以使用

我们再分析几个问题加深这部分的理解:

        1.this指针是存储在哪个内存区域?

         A.堆        B.栈        C.静态区        D.常量区        E.对象里面 

        答案是B,因为this指针本质是一种形参。

        2.下面程序编译运行结果是?

        a.编译报错        b,运行崩溃        c,正常运行

class A {
public:
	void Print() {
		cout << "Print()" << endl;
	}
private:
	int _a;
};
int main() {
	A* p = nullptr;
	p->Print();
	return 0;
}

答案是c,虽然看似空指针p解引用,实际上调用成员函数是在代码段,没有发生解引用,没有访问对象内部的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值