类和对象(上)

本文介绍了C++中的类概念,包括类的引入、访问限定符(public、private、protected)、类对象的实际大小、内存对齐规则,以及this指针在成员函数中的作用和使用示例。
摘要由CSDN通过智能技术生成

目录

类的引入

类的访问限定符

类对象的大小

this指针


类的引入

C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完
成。C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。

类的访问限定符

C++中的访问限定符用于控制类中成员的访问权限。C++中有三种访问限定符,即public、private和protected。

  1. public: 公有访问限定符,表示成员可以被类内外的任何部分访问。

  2. private: 私有访问限定符,表示成员只能被类内部的其他成员访问,类外部无法直接访问。

  3. protected: 保护访问限定符,表示成员可以被类内部的其他成员和派生类的成员访问,但不能被类外部的成员访问。

这些访问限定符可以应用于类中的成员变量和成员函数。默认情况下,类中的成员变量和成员函数的访问限定符是private,即默认为私有访问限定符。可以通过在类定义中明确指定访问限定符来改变成员的访问权限。

类对象的大小

一个类的大小,实际就是该类中”成员变量”之和,当然要注意内存对齐,注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类的对象。

结构体内存对齐规则:

1. 第一个成员在与结构体偏移量为0的地址处。
2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。
VS中默认的对齐数为8
3. 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。
4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整
体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

tips:类对象的储存方式:只保存成员变量,成员函数存放在公共的代码段

this指针

this指针是一个隐含于每个非静态成员函数的特殊指针。它指向当前对象的地址,用于在成员函数中访问对象的成员变量和成员函数。

在C++中,每个对象都有自己的一份成员变量,而成员函数被所有对象所共享。当调用对象的成员函数时,编译器会自动地将对象的地址作为隐藏参数传递给该函数,这就是this指针的作用。

this指针使用的语法是在成员函数中使用"this->"来访问对象的成员。例如,如果在一个成员函数中访问成员变量x,可以使用"this->x"来表示当前对象的成员变量x。

this指针还可以用于返回对象本身。在成员函数中,可以使用"return *this;"来返回当前对象。这对于实现链式调用非常有用。

下面是一个简单的示例,演示了this指针的使用:

#include <iostream>

class MyClass {
    int x;

public:
    void setX(int value) {
        this->x = value;
    }

    void printX() {
        std::cout << "x = " << this->x << std::endl;
    }

    MyClass add(const MyClass& other) {
        MyClass result;
        result.x = this->x + other.x;
        return result;
    }
};

int main() {
    MyClass obj1;
    obj1.setX(5);
    obj1.printX();  // 输出:x = 5

    MyClass obj2;
    obj2.setX(10);

    MyClass obj3 = obj1.add(obj2);
    obj3.printX();  // 输出:x = 15

    return 0;
}

在上面的示例中,setX()函数使用this指针来设置当前对象的成员变量x;printX()函数使用this指针来打印当前对象的成员变量x;add()函数使用this指针来访问当前对象和另一个对象的成员变量,并返回一个新的对象。

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值