【C++初阶】第二站:类与对象(上) -- 上部分

2024-02-26 1512阅读

温馨提示:这篇文章已超过390天没有更新,请注意相关的内容是否还可用!

前言:

        C++学习的第二站:类和对象(上)文章的上半部分,知识点:面向过程和面向对象初步认识、类的引入、类的定义、类的访问限定符及封装、类的作用域、类的实例化.

【C++初阶】第二站:类与对象(上) -- 上部分

目录

面向过程和面向对象初步认识

类的引入

类的定义

类的访问限定符及封装

访问限定符

封装

类的作用域

类的实例化


面向过程和面向对象初步认识

  C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题.    C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成.

就拿洗衣服来说:

    C语言更注重的是解决问题的过程,洗完一件衣服,需要经历以下过程:

【C++初阶】第二站:类与对象(上) -- 上部分    而C++更注重的是在解决问题的过程中的对象个体是什么,对象起的不同作用又是什么,这个对象又是属于什么类,重点关注这些,而不是关注处理事件的过程。

【C++初阶】第二站:类与对象(上) -- 上部分

类的引入

         C语言 结构体中 只能定义变量 , 在C++中 , 结构体内不仅可以定义变量,也可以定义函数 。 比如:之前在数据结构初阶中,用 C语言 方式实现的栈,结构体中 只能定义变量:
struct Stack  
{
	//成员变量
	int* a;
	int top;
	int capacity;
};

现在以C++方式实现,会发现struct中也可以定义函数:

struct Stack  
{
	//成员函数
	void Init()
	{
		a = nullptr;
		top = capacity = 0;
	}
	void Push(int x)
	{
		//...
	}
	//成员变量
	int* a;
	int top;
	int capacity;
};

C++兼容C语言,结构用法,可以继续使用,同时struct也升级成了类:

1.结构体类不仅可以包含成员变量,也可以包含成员函数

2.这个结构体的名称可以像类一样作为数据类型使用

C语言创建对象,实现传参,C语言不能将数据类型直接写成Stack,需要改名的话用到typedef:

void StackInit(struct Stack* ps)
{
	//...
}
void StackPush(struct Stack*ps,int x)
{
};
int main()
{
	//C语言写法
	struct Stack st1;//数据类型struct Stack
	StackInit(&st1);
	StackPush(&st1,1);
	StackPush(&st1,2);
	return 0;
}

C++创建对象,访问类中的成员,注意可以直接把结构名Stack当成类名:

struct Stack//(结构名)  
{
	//成员函数
	void Init()
	{
		a = nullptr;
		top = capacity = 0;
	}
	void Push(int x)
	{
		//...
	}
	//成员变量
	int* a;
	int top;
	int capacity;
};
int main()
{
	//C++写法
	Stack st2;//Stack为类名,可以直接写Stack,不用typedef别名为Stack
	st2.Init();
	st2.Push(1);
	st2.Push(2);
	st2.Push(3);
	return 0;
}

C++定义类:①直接用结构体struct ②但更常用的是class

 类的定义

class className
{
// 类体:由成员函数和成员变量组成
};  // 一定要注意后面的分号
        class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分 号不能省略。         类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者 成员函数。         之前我们学过C++的内联函数,内联不能实现声明和定义分离,那么类可以吗?答案是可以。  类的两种定义方式: 1.类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名::   代码演示: Func.h
#pragma once
#include
using namespace std;
class Stack
{
public:
	//成员函数
	void Init();
	void Push(int x);
	int Top();
private:
	//成员变量
	int* a;
	int top;
	int capacity;
};

Func.cpp

#include"Func.h"
void Stack::Init()
{
	a = nullptr;
	top = capacity = 0;
}
void Stack::Push(int x)
{
	if (top == capacity)
	{
		size_t newcapacity = capacity == 0 ? 4 : capacity * 2;
		a = (int*)realloc(a, sizeof(int)*newcapacity);
		capacity = newcapacity;
	}
	a[top++] = x;
}
int Stack::Top()
{
	return a[top - 1];
}

Test.cpp

int main()
{
	Stack st;
	st.Init();
	st.Push(1);
	st.Push(2);
	st.Push(3);
	st.Push(4);
	cout 
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]