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 分钟前
Python 常用内置模块详解:日志、随机数、时间、OS 与 JSON
开发语言·python
_君莫笑10 分钟前
Qt+Qml前后端分离上位机软件技术方案
c++·qt·用户界面·qml
右耳朵猫AI12 分钟前
Python技术周刊 2026年第14周
开发语言·python·okhttp
叼烟扛炮21 分钟前
C++ 知识点22 函数模板
开发语言·c++·算法·函数模版
求学中--35 分钟前
鸿蒙网络请求从入门到精通:HttpURLConnection+第三方库,GET/POST/文件上传全覆盖
开发语言·php·harmonyos
yaodong51840 分钟前
Gemini长上下文重塑RAG架构
开发语言·php
风味蘑菇干42 分钟前
继承 + static + final 综合应用
java·开发语言
IT策士44 分钟前
Python 面试系列:常见 100 个经典面试问题,从入门到进阶
开发语言·python·面试
￰meteor1 小时前
【移动语义与移动构造】
c++
想取一个与众不同的名字好难1 小时前
QT webSocket接收客户端发送的双目摄像头数据并显示
开发语言·qt·websocket