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

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

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

相关推荐
jieyucx5 分钟前
Go 语言零基础入门:编写第一个 Hello World 程序
开发语言·后端·golang
沐知全栈开发9 分钟前
Rust 数据类型
开发语言
jieyucx17 分钟前
Go 语言基础语法:变量、常量与数据类型详解
开发语言·后端·golang
光影少年18 分钟前
Python+LangGraph学习路线及发展前景
开发语言·人工智能·python·学习
NOCSAH24 分钟前
统好AI:Java技术生态下的智能知识管理新选择
java·开发语言·人工智能
穗余36 分钟前
Rust——println!后面的感叹号什么意思【宏】
开发语言·python·rust
原来是猿39 分钟前
QT初识【创建项目+对象树】
开发语言·qt
长安第一美人1 小时前
算能 BM1688 低延迟推流:Qt+WebSocket 直出 H5/HDMI
开发语言·网络·嵌入式硬件·websocket·交互
水饺编程1 小时前
第5章,[标签 Win32] :获取设备环境的信息
c语言·c++·windows·visual studio
lhbian1 小时前
C++、C与易语言:编程语言对比解析
c语言·开发语言·c++