C++基础入门:类和对象(上)

◆博主名称:少司府

欢迎来到少司府的博客☆*: .。. o(≧▽≦)o .。.:*☆

⭐数据结构系列个人专栏:

初阶数据结构_少司府的博客-CSDN博客

⭐编程基础训练系列个人专栏:

编程基础50题_少司府的博客-CSDN博客

⭐名不显时心不朽,再挑灯火看文章

目录

一、类的定义

[1.1 类的定义的格式](#1.1 类的定义的格式)

[1.2 访问限定符](#1.2 访问限定符)

[1.3 类域](#1.3 类域)

二、实例化

[2.1 实例化的概念](#2.1 实例化的概念)

[2.2 对象大小](#2.2 对象大小)

三、this指针


一、类的定义

1.1 类的定义的格式

1)、class为定义类的关键字,{ }中为类的主体,类体中内容为类的成员:类中的变量称为类的属性或成员变量,类中的函数称为类的方法或成员函数。

2)、为了区分成员变量,一般习惯在成员变量前加上一个特殊标识,如 _

3)、C++中struct也可以定义类,C++兼容C中struct的用法,同时struct升级为类

4)、定义在类面的成员函数默认为inline

cpp 复制代码
#include <iostream>

class Date
{
    int _year;
    int _month;
    int _day;
    void Print()
    {
        std::cout << _year << ' ' << _month << ' ' << _day << std::endl;
    }
}
1.2 访问限定符

1)、C++一种实现封装的方式,用类将对象的属性与方法结合在一起,让对象更加完善,通过访问限定符选择性将其接口提供给用户使用

2)、public修饰的成员在类外可以++直接被访问++;protected和private不能

3)、访问权限从该限定符出现开始到下一个限定符出现为止

4)、class定义的成员没有被访问限定符修饰时,默认为private;struct的默认为public

cpp 复制代码
class Stack //Stack既是类名也是其类型
{
public:
       void Push(int x)
       {
           //...
       }
private:
        int _val;
}

int main()
{
    Stack st; // 创建一个Stack类的对象
    st.Push(1);
    return 0;
}
1.3 类域

类定义了一个新的作用域,在类外定义成员时,需使用 :: 作用域操作符指明成员属于哪个类域。

cpp 复制代码
class Date{
public :
    Init(int year,int month,int day);
private:
    int _year; // 只是声明,没有开空间
    int _month;
    int _day;
}

void Date::Init(int year,int month,int day){
    _year=year;
    _month=month;
    _day=day;
}

二、实例化

2.1 实例化的概念

1)、用类类型在物理内存中创建对象的过程,称为类实例化出对象

2)、类是对象进行一种抽象描述 ,是一个模型一样的东西,限定了类有那些成员变量,这些成员变量只是声明,没有分配空间,只有实例化出对象时才会分配空间。

3)、成员函数不存放在对象里面

2.2 对象大小

1)、第一个成员在结构体偏移量为0的地址处

2)、其他成员变量要对其到某个数字(对齐数)的整数倍的地址处

3)、对齐数=编译器默认的对齐数与该成员大小的较小值

4)、VS的默认对齐数是8

5)、结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐数取最小)的整数倍

6)、如果嵌套了结构体的情况,嵌套的结构体对齐到自己最大对齐数的整数倍,结构体整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍

7)、没有成员变量的类,其对象大小是1

三、this指针

编译器编译后,类的成员函数默认会在形参第一个位置,增加一个当前类型的指针,叫做this指针。

cpp 复制代码
void Init(Date* const this,int year,int month,int day);

类的成员函数访问成员变量,本质是通过this指针访问的。

cpp 复制代码
// this->_year=year;

C++规定不能在实参和形参的位置显示地写this(编译器会自己处理),但可以在函数体内使用this指针。

本期的分享就到这里,如果觉得博主的文章比较对胃口的话,可以点一个小小的关注~

您的三连是我持续更新的动力~

相关推荐
谙弆悕博士5 分钟前
用 C 写了个 Windows 聊天室,踩了几个多线程和控制台的坑
c语言·开发语言·c++·windows·网络编程·聊天室
Canmag 兴隆磁性11 分钟前
回复磁导率 μ_R:永磁体在动态磁路中的关键参数
开发语言·学习·r语言·永磁材料·充磁·磁导率
水饺编程15 分钟前
第2章:Linux 基础,删除用户
linux·c语言·汇编
CRMEB系统商城18 分钟前
鲜花零售的预售与积分营销
开发语言·人工智能·科技·小程序·零售
Wang's Blog38 分钟前
Java 项目实战: 交友项目 - 喜欢与取消喜欢
java·开发语言·交友
stolentime1 小时前
CF2277E Tree Guessing题解
c++·算法·贪心算法·交互·ad-hoc
quantdash_cc1 小时前
如何检查滚动收益率计算中的窗口长度不足?——从数学定义到 Pandas 实现
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
衍生星球2 小时前
【Java 语言】— 方法(方法定义、调用、参数、返回值、方法重载)
java·开发语言·方法
CodeGL2 小时前
16、Python Web开发
开发语言·前端·python
喵了几个咪2 小时前
GoWind UBA 拆解:把 Doris UNIQUE KEY 翻译成 ClickHouse——读数正确性对齐实录
开发语言·后端·clickhouse·微服务·golang·gowind