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指针。

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

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

相关推荐
deep_drink2 小时前
1.1、Python 与编程基础:开发环境、基础工具与第一个 Python 项目
开发语言·人工智能·python·llm
REDcker2 小时前
C++ new、堆分配与 brk / mmap
linux·c++·操作系统·c·内存
丸辣,我代码炸了2 小时前
如何手搓序列化器(以java为例)
java·开发语言·kafka
阿阿阿阿里郎2 小时前
C++面向对象--类、模板
c++
William_wL_2 小时前
【C++】list的使用
c++
快乐柠檬不快乐2 小时前
基于Java+SpringBoot+SSM攻防靶场实验室平台
java·开发语言·spring boot
lly2024062 小时前
SQL AND & OR 操作符详解
开发语言
伐尘2 小时前
【图形学】CS:GO 的 “Uber 着色器” 是啥?
开发语言·golang·着色器
Elnaij2 小时前
从C++开始的编程生活(25)——C++11标准Ⅱ
开发语言·c++