小工具知识网

当前位置: 首页 > 行业知识 > 【C++初阶】第二站:类与对象(上) -- 上部分

行业知识

【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 

上一篇:无锡备案章

下一篇:方舟怎么下载洪荒服务器?