C++学习第十一课:类和对象的奥秘

本文详细介绍了C++中的类和对象,包括类的定义、对象实例化、成员访问控制、构造函数(无参/带参、初始化列表)、析构函数、构造函数的复杂性、this指针、sizeof运算符和友元的使用。这些都是面向对象编程的关键要素。
摘要由CSDN通过智能技术生成

在这里插入图片描述

C++学习第十一课:类和对象的奥秘

在C++中,类是面向对象编程的核心概念,它允许你将数据和行为封装在一起,创建出具有特定属性和方法的对象。本课将介绍类的声明、实例化、成员访问、构造函数以及初始化列表的使用。

1. 类和对象基础

  • 类的定义:类是创建对象的蓝图,包含数据成员(属性)和成员函数(方法)。
  • 对象的实例化:根据类创建具体对象的过程。
class MyClass {
public:
    int myData;
    void myMethod() {
        std::cout << "Hello from myMethod" << std::endl;
    }
};

int main() {
    MyClass myObject; // 实例化MyClass创建对象myObject
    myObject.myData = 10;
    myObject.myMethod(); // 调用对象的成员函数
    return 0;
}

2. 成员访问

  • publicprivate 关键字:控制成员的访问权限。
    • public:类的成员可以被外部访问。
    • private:类的成员只能被类的内部访问。
class MyClass {
private:
    int privateData; // 私有数据成员

public:
    void setData(int data) {
        privateData = data; // 通过公共方法访问私有成员
    }

    int getData() const {
        return privateData; // 常量成员函数,不能修改对象状态
    }
};

3. 构造函数

  • 声明和实现构造函数:构造函数是类的特殊成员函数,用于初始化对象。
  • 带参和不带参的构造函数:允许类在创建对象时传入不同的初始化参数。
class MyClass {
private:
    int value;

public:
    // 无参构造函数
    MyClass() : value(0) {}

    // 带参构造函数
    MyClass(int v) : value(v) {}

    int getValue() const {
        return value;
    }
};

4. 构造函数的初始化列表

  • 使用初始化列表来初始化成员变量,这是C++中推荐的初始化方式。
class MyClass {
private:
    int importantValue;

public:
    MyClass(int iv) : importantValue(iv) {
        // 初始化列表已经初始化了importantValue,这里可以执行其他初始化
    }
};

5. 析构函数

  • 声明和实现析构函数:析构函数是类的另一个特殊成员函数,当对象生命周期结束时自动调用。
class MyClass {
public:
    ~MyClass() {
        std::cout << "MyClass object destroyed" << std::endl;
    }
};

6. 析构函数

  • 析构函数:当对象生命周期结束时自动调用的特殊成员函数,用于执行清理工作。
class Resource {
public:
    ~Resource() {
        std::cout << "Resource is being cleaned up" << std::endl;
        // 释放资源,如关闭文件、释放内存等
    }
};

int main() {
    Resource res;
    // 当main函数结束时,res的析构函数被调用
    return 0;
}

7. 复杂的构造函数

  • 参数默认值:为构造函数的参数提供默认值。
class Circle {
public:
    // 带默认参数值的构造函数
    Circle(double r = 1.0) : radius(r) {}

private:
    double radius;
};
  • 构造函数的重载:为类提供多个构造函数,以不同的方式初始化对象。
class Rectangle {
public:
    // 无参构造函数
    Rectangle() : width(0), height(0) {}

    // 带参构造函数
    Rectangle(double w, double h) : width(w), height(h) {}

private:
    double width;
    double height;
};

8. 构造函数和析构函数的其他用途

  • 资源管理:管理动态分配的资源,如内存、文件句柄等。
  • 继承:在派生类的构造函数和析构函数中调用基类的构造函数和析构函数。

9. this 指针

  • this 指针:指向当前对象的指针,用于区分对象的实例变量和局部变量。
class Example {
public:
    void print() {
        std::cout << this << std::endl; // 输出this指针的地址
        std::cout << &this->value << std::endl; // 输出成员变量value的地址
    }

private:
    int value;
};

int main() {
    Example ex;
    ex.print(); // 打印对象的地址和成员变量的地址
    return 0;
}

10. sizeof 用于类

  • sizeof 运算符可以用于获取类的内存占用大小。
class Data {
    int a;
    double b;
};

int main() {
    std::cout << "Size of Data: " << sizeof(Data) << " bytes" << std::endl;
    return 0;
}

11. 友元

  • 友元(Friendship):允许非成员函数或另一个类的成员函数访问类的私有(private)和保护(protected)成员。
class Account;

class Transaction {
    Account* account;

public:
    void deposit(double amount);
};

class Account {
    friend class Transaction; // 声明Transaction为友元
    double balance;

public:
    Account(double b) : balance(b) {}

    void credit(double amount) {
        balance += amount; // 只能由Account的成员函数或友元函数调用
    }
};

结语

通过本课的学习,你了解了析构函数的作用、构造函数的复杂性、this 指针的使用、sizeof 运算符在类中的应用,以及友元的概念。

这些概念对于深入理解C++中的类和对象至关重要。它们不仅提供了强大的功能,也要求开发者对资源管理和类的设计有深刻的认识。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值