行业知识
【C++初阶】第二站:类与对象(上) -- 上部分
2026-10-19 13:27:43
来源:互联网转载
前言:
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 StackStackInit(&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别名为Stackst2.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#includeusing 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
上一篇:无锡备案章
下一篇:方舟怎么下载洪荒服务器?