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


