目录
- 面向过程与面向对象初步认识
- 类的定义
- struct定义类
- class定义类
- 类的访问限定符及封装
- 访问限定符
- 声明与定义分离
- this指针
- 类成员的命名问题
- this
- 类的实例化
- 类的对象大小的计算
- 成员函数为何不在对象里面
- 类对象大小计算
面向过程与面向对象初步认识
C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完
成。
类的定义
struct定义类
C++在C语言的基础上将struct升级成了类
1、struct使用上的升级,不用typedef就可以直接用类名,类名就是类型
struct Stack
{
int* a;
int top;
int capacity;
};
int main()
{
Stack s1;
return 0;
}
2、类里面可以定义函数
struct Stack
{
int* a;
int top;
int capacity;
void Init()
{
a = nullptr;
top = 0;
capacity = 0;
}
void Push(int x)
{
//...
}
};
int main()
{
Stack s1;
s1.Init();
s1.Push(1);
s1.Push(2);
return 0;
}
class定义类
C++更喜欢用class定义类
用class之后会有不同,而这个不同就得因为访问限定符
class className
{
// 类体:由成员函数和成员变量组成
}; // 一定要注意后面的分号
类的访问限定符及封装
访问限定符
【访问限定符说明】
(1) public修饰的成员在类外可以直接被访问
(2) protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
(3) 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
(4) 如果后面没有访问限定符,作用域就到 } 即类结束。
(5) class的默认访问权限为private,struct为public(因为struct要兼容C)
私有与保护在继承那块有区别,这里可以先认为没有区别
声明与定义分离
C语言是函数放函数的声明,结构体直接在.h里面
C++类,类的成员放.h里面,类的函数只放声明
变量的声明与定义的区分,要看有没有开空间
Stack.h
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
class Stack
{
int* a;
int top;
int capacity;
public:
void Init();
void Push(int x);
};
test.cpp
#include "Stack.h"
void Stack::Init()
{
a = 0;
top = 0;
capacity = 0;
}
void Stack::Push(int x)
{
//...
}
int main()
{
Stack s1;
s1.Init();
s1.Push(1);
s1.Push(2);
return 0;
}
::这是域作用限定符
默认是内联,但也不一定会展开,最终展不展开还是看这个函数长不长、编译器的最终决定。
类规范定义:
长的函数声明与定义分离
短小的函数可以直接在类里面定义
this指针
类成员的命名问题
下列这个问题并不会报错,但d不会被初始化,解决方法:
(1)改变参数的名称(不常用)
(2)改变成员变量的名称(eg:_year,这根据每个公司可能会不一样)
this
编译器会处理成下列的样子,不能显示的写
class Date
{
int _year;
int _month;
int _day;
public:
void Init(Date* this, int year, int month, int day)
{
this -> _year = year;
this -> _month = month;
this -> _day = day;
}
};
int main()
{
Date d;
Date d2;
d.Init(&d, 2024, 1, 21);
d2.Init(&d2, 2022, 10, 7);
return 0;
}
类的实例化
用类类型创建对象的过程,称为类的实例化
- 类是对对象进行描述的,是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没
有分配实际的内存空间来存储它;比如:入学时填写的学生信息表,表格就可以看成是一个
类,来描述具体学生信息。
2.一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量 - 类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设
计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象
才能实际存储数据,占用物理空间
类的对象大小的计算
类的大小只算成员变量的大小,成员函数不在对象里面。
成员函数为何不在对象里面
不同对象的成员函数是一样的
不同对象的成员变量是不一样的
因为成员函数用的都是一样的,如果每个对象都有成员函数,那么就白白浪费空间了。
类对象大小计算
要考虑内存对齐
内存对齐规定:
对于一个变量:要取其自己的对齐数与默认对齐数小的那个
这个类的大小是8
class Test2
{};
int main()
{
Test2 B;
return 0;
}
B的大小是 : 1,因为要占位。无成员变量的类(可以有成员函数),对象大小开一个字节,这个字节不存储有效数据,标识定义的对象存在过。
【C++第一课 - C++入门】相关软件(vs、gitee)、命名空间、输入输出流、缺省参数、函数重载、引用、内联函数、auto、范围for(语法糖)、nullptr