【C++】类和对象1.0

本鼠浅浅介绍一些C++类和对象的知识,希望能得到读者老爷们的垂阅!

目录

1.面向过程和面向对象

2.类的引入

3.类的定义

4.类的访问限定符及封装

4.1.类的访问限定符

4.2.封装

5.C++中struct和class的区别

6.类域

7.类的实例化

8.类对象模型

8.1.类对象大小

8.2.类对象的存储方式

9.this指针 

9.1.this指针的引出

 9.2.this指针的特性

10.Question


1.面向过程和面向对象

作为了解:

C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 

C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完 成。

没了,介绍完了。其实对于解决问题,C语言关注的是解决问题的动作,而C++关注的是解决问题的对象呗。

2.类的引入

俺们都知道C语言中有结构体的概念。那么C++兼容C语言的大部分语法,所以C++也可以使用结构体。但是C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数

举个栗子给老爷们瞅瞅:

#include<iostream>
#include<assert.h>
using namespace std;
typedef int SLTDateType;
struct SListNode
{
	SLTDateType data;
	struct SListNode* next;
	//动态申请一个节点
	SListNode* BuyNode(SLTDateType x)
	{
		SListNode* newnode = (SListNode*)malloc(sizeof(SListNode));
		if (newnode == NULL)
		{
			perror("malloc fail");
			exit(-1);
		}
		newnode->data = x;
		newnode->next = NULL;
		return newnode;
	}
	//单链表打印
	void Print(SListNode* plist)
	{
		SListNode* cur = plist;
		while (cur != NULL)
		{
			cout << cur->data << "->";
			cur = cur->next;
		}
		cout << "nullptr" << endl;
	}
	//单链表尾插
	void PushBack(SListNode** pplist, SLTDateType x)
	{
		assert(pplist);
		if (*pplist == NULL)//单链表为空
		{
			*pplist = BuyNode(x);
		}
		else//单链表不为空
		{
			SListNode* tail = *pplist;
			while (tail->next != NULL)//找尾
			{
				tail = tail->next;
			}
			SListNode* newnode = BuyNode(x);
			tail->next = newnode;
		}
	}
	//单链表头插
	void PushFront(SListNode** pplist, SLTDateType x)
	{
		assert(pplist);
		SListNode* newnode = BuyNode(x);
		newnode->next = *pplist;
		*pplist = newnode;
	}
	//销毁单链表
	void Destroy(SListNode** pphead)
	{
		assert(pphead);
		SListNode* cur = *pphead;
		while (cur)
		{
			SListNode* next = cur->next;
			free(cur);
			cur = next;
		}
		*pphead = NULL;
	}
};
int main()
{
	SListNode* sl = nullptr;
	sl->PushBack(&sl, 0);
	sl->PushFront(&sl, -1);
	sl->Print(sl);
	sl->Destroy(&sl);
	return 0;
}

 是可以运行的,且结果符合预期!!

上面结构体的定义,在C++中更喜欢用class来代替struct。这样C++中结构体就升级成了

3.类的定义


类的定义格式:class为定义类的关键字,ClassName为类的名字(可随意变换),{}中为类的主体,注意类定义结束时后面分号不能省略。

这样子:

class className//className是类的名字
{
 // 类体:由成员函数和成员变量组成
 
};  // 一定要注意后面的分号

类体中内容称为类的成员:类中的变量称为类的属性成员变量; 类中的函数称为类的方法或者成员函数。 


类的两种定义方式:

1.方式一:声明和定义全部放在类体中。

需注意:成员函数如果在类中定义,编译器默认会将其当成内联函数处理,但是说内联说明只是向编译器发出一个请求,编译器可以选择忽略这个请求。

像这样子:

class person
{
	//成员变量的声明
	int age;
	const char* name;
	const char* sex;
	//成员函数的定义
	void showinformation()
	{
		cout << name << '-' << sex << '-' << age << endl;
	}
};

 2.方式二:类声明放在.h文件中,成员函数定义放在.cpp文件中。其实就是成员函数声明和定义分离。

注意:成员函数名前需要加类名::

像这样子:

类的.h文件(假如头文件为Person.h):

class person
{
	//成员变量的声明
	int age;
	const char* name;
	const char* sex;
	//成员函数的声明
	void showinformation();
};

类的.cpp文件:

#include"Person.h"

	//成员函数的定义
	void person::showinformation()
	{
		cout << name << '-' << sex << '-' << age << endl;
	}

一般情况下,更期望采用第二种方式。

4.类的访问限定符及封装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

X_chengonly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值