C++类与对象深度解析

深度剖析 C++ 之类和对象(上)

类的基本概念

在 C++ 中,类是面向对象编程的核心概念。类是一种用户自定义的数据类型,用于封装数据和操作数据的方法。类的定义通常包括成员变量和成员函数。成员变量用于存储对象的状态,成员函数用于定义对象的行为。

class MyClass {
public:
    int myVar; // 成员变量
    void myFunc() { // 成员函数
        // 函数实现
    }
};

访问控制与封装

C++ 提供了三种访问控制修饰符:publicprivateprotected。这些修饰符用于控制类成员的访问权限,实现封装。

  • public:成员可以被类的外部代码直接访问。
  • private:成员只能在类的内部访问,外部代码无法直接访问。
  • protected:成员可以在类的内部和派生类中访问。
class Example {
public:
    int publicVar; // 公有成员
private:
    int privateVar; // 私有成员
protected:
    int protectedVar; // 保护成员
};

构造函数与析构函数

构造函数用于初始化类的对象,析构函数用于在对象销毁时释放资源。构造函数可以重载,析构函数只能有一个且没有参数。

class Person {
public:
    Person() { // 默认构造函数
        name = "Unknown";
        age = 0;
    }
    Person(string n, int a) { // 带参数的构造函数
        name = n;
        age = a;
    }
    ~Person() { // 析构函数
        cout << "Object destroyed." << endl;
    }
private:
    string name;
    int age;
};

对象的内存布局

对象在内存中的布局取决于其成员变量的顺序和访问控制修饰符。通常情况下,成员变量按照声明的顺序存储在内存中。编译器可能会在成员变量之间插入填充字节以满足对齐要求。

class MemoryLayout {
public:
    char a; // 1 字节
    int b;  // 4 字节
    char c; // 1 字节
};
// 实际内存占用可能大于 6 字节,因为对齐要求

静态成员

静态成员属于类本身,而不是类的某个对象。静态成员变量在所有对象之间共享,静态成员函数只能访问静态成员变量。

class StaticExample {
public:
    static int count; // 静态成员变量
    StaticExample() {
        count++;
    }
    static void showCount() { // 静态成员函数
        cout << "Count: " << count << endl;
    }
};
int StaticExample::count = 0; // 静态成员变量初始化

友元函数与友元类

友元函数和友元类可以访问类的私有成员和保护成员。友元关系破坏了封装性,但在某些情况下是必要的。

class FriendExample {
private:
    int secret;
public:
    FriendExample(int s) : secret(s) {}
    friend void showSecret(FriendExample& fe); // 友元函数
};
void showSecret(FriendExample& fe) {
    cout << "Secret: " << fe.secret << endl;
}

运算符重载

运算符重载允许为类定义特定的运算符行为。运算符重载可以是成员函数或友元函数。

class Complex {
public:
    Complex(double r, double i) : real(r), imag(i) {}
    Complex operator+(const Complex& other) { // 成员函数重载
        return Complex(real + other.real, imag + other.imag);
    }
    friend ostream& operator<<(ostream& os, const Complex& c); // 友元函数重载
private:
    double real, imag;
};
ostream& operator<<(ostream& os, const Complex& c) {
    os << c.real << " + " << c.imag << "i";
    return os;
}

继承与多态

继承是面向对象编程的重要特性,允许派生类继承基类的成员。多态通过虚函数实现,允许派生类重写基类的函数。

class Base {
public:
    virtual void show() { // 虚函数
        cout << "Base class" << endl;
    }
};
class Derived : public Base {
public:
    void show() override { // 重写虚函数
        cout << "Derived class" << endl;
    }
};

总结

类和对象是 C++ 面向对象编程的基础。通过封装、继承和多态,可以实现代码的复用和模块化。理解类的内存布局、访问控制和运算符重载等概念,有助于编写高效且易于维护的代码。

BbS.okane408.info/PoSt/1121_608053.HtM
BbS.okane409.info/PoSt/1121_545096.HtM
BbS.okane410.info/PoSt/1121_920614.HtM
BbS.okane411.info/PoSt/1121_663764.HtM
BbS.okane412.info/PoSt/1121_317431.HtM
BbS.okane413.info/PoSt/1121_318933.HtM
BbS.okane414.info/PoSt/1121_730830.HtM
BbS.okane415.info/PoSt/1121_735381.HtM
BbS.okane416.info/PoSt/1121_483039.HtM
BbS.okane417.info/PoSt/1121_063700.HtM
BbS.okane408.info/PoSt/1121_863675.HtM
BbS.okane409.info/PoSt/1121_028222.HtM
BbS.okane410.info/PoSt/1121_522222.HtM
BbS.okane411.info/PoSt/1121_120378.HtM
BbS.okane412.info/PoSt/1121_955778.HtM
BbS.okane413.info/PoSt/1121_116847.HtM
BbS.okane414.info/PoSt/1121_180314.HtM
BbS.okane415.info/PoSt/1121_462382.HtM
BbS.okane416.info/PoSt/1121_629064.HtM
BbS.okane417.info/PoSt/1121_649603.HtM
BbS.okane408.info/PoSt/1121_322528.HtM
BbS.okane409.info/PoSt/1121_068994.HtM
BbS.okane410.info/PoSt/1121_602242.HtM
BbS.okane411.info/PoSt/1121_296328.HtM
BbS.okane412.info/PoSt/1121_059737.HtM
BbS.okane413.info/PoSt/1121_823658.HtM
BbS.okane414.info/PoSt/1121_461307.HtM
BbS.okane415.info/PoSt/1121_300091.HtM
BbS.okane416.info/PoSt/1121_557766.HtM
BbS.okane417.info/PoSt/1121_008733.HtM
BbS.okane408.info/PoSt/1121_473411.HtM
BbS.okane409.info/PoSt/1121_200438.HtM
BbS.okane410.info/PoSt/1121_565776.HtM
BbS.okane411.info/PoSt/1121_404914.HtM
BbS.okane412.info/PoSt/1121_932331.HtM
BbS.okane413.info/PoSt/1121_631405.HtM
BbS.okane414.info/PoSt/1121_049976.HtM
BbS.okane415.info/PoSt/1121_440662.HtM
BbS.okane416.info/PoSt/1121_155382.HtM
BbS.okane417.info/PoSt/1121_809143.HtM
BbS.okane408.info/PoSt/1121_985059.HtM
BbS.okane409.info/PoSt/1121_529423.HtM
BbS.okane410.info/PoSt/1121_789202.HtM
BbS.okane411.info/PoSt/1121_087609.HtM
BbS.okane412.info/PoSt/1121_649660.HtM
BbS.okane413.info/PoSt/1121_481598.HtM
BbS.okane414.info/PoSt/1121_467305.HtM
BbS.okane415.info/PoSt/1121_714190.HtM
BbS.okane416.info/PoSt/1121_188394.HtM
BbS.okane417.info/PoSt/1121_041242.HtM
BbS.okane408.info/PoSt/1121_993565.HtM
BbS.okane409.info/PoSt/1121_698595.HtM
BbS.okane410.info/PoSt/1121_136997.HtM
BbS.okane411.info/PoSt/1121_117715.HtM
BbS.okane412.info/PoSt/1121_388187.HtM
BbS.okane413.info/PoSt/1121_112968.HtM
BbS.okane414.info/PoSt/1121_399191.HtM
BbS.okane415.info/PoSt/1121_955645.HtM
BbS.okane416.info/PoSt/1121_415774.HtM
BbS.okane417.info/PoSt/1121_556232.HtM
BbS.okane418.info/PoSt/1121_030958.HtM
BbS.okane419.info/PoSt/1121_572132.HtM
BbS.okane420.info/PoSt/1121_772925.HtM
BbS.okane421.info/PoSt/1121_276362.HtM
BbS.okane422.info/PoSt/1121_343030.HtM
BbS.okane423.info/PoSt/1121_410627.HtM
BbS.okane424.info/PoSt/1121_753298.HtM
BbS.okane425.info/PoSt/1121_614891.HtM
BbS.okane426.info/PoSt/1121_627353.HtM
BbS.okane427.info/PoSt/1121_647000.HtM
BbS.okane418.info/PoSt/1121_183239.HtM
BbS.okane419.info/PoSt/1121_852615.HtM
BbS.okane420.info/PoSt/1121_837027.HtM
BbS.okane421.info/PoSt/1121_465339.HtM
BbS.okane422.info/PoSt/1121_345901.HtM
BbS.okane423.info/PoSt/1121_425524.HtM
BbS.okane424.info/PoSt/1121_324246.HtM
BbS.okane425.info/PoSt/1121_134383.HtM
BbS.okane426.info/PoSt/1121_988164.HtM
BbS.okane427.info/PoSt/1121_039358.HtM

#牛客AI配图神器#

全部评论

相关推荐

点赞 评论 收藏
分享
10-13 16:58
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务