继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

C++面向对象编程入门教程

沧海一幻觉
关注TA
已关注
手记 345
粉丝 34
获赞 198
概述

本文详细介绍了C++面向对象编程的基础概念和实现方式,包括类和对象的定义、成员变量与成员函数的使用、构造函数与析构函数的作用,以及继承和多态的应用。文章还深入讲解了封装与接口的设计,帮助读者理解如何通过C++面向对象来编写模块化和可复用的代码。

C++面向对象概述

面向对象编程的基本概念

面向对象编程(Object-Oriented Programming,简称 OOP)是一种编程范式,它通过抽象数据和行为来模拟现实世界中的对象。面向对象编程的主要概念包括:

  • 类(Class):类是对一类对象的抽象描述,定义了对象的数据结构和行为。
  • 对象(Object):对象是类的实例,具有类定义的数据结构和行为。
  • 封装(Encapsulation):封装是指将数据和操作数据的方法组合在一起,对外部隐藏内部细节。
  • 继承(Inheritance):继承是指一个类可以继承另一个类的属性和方法,从而实现代码复用和层次结构。
  • 多态(Polymorphism):多态是指一个类的对象可以有不同的表现形式,即同一个类的对象可以表现出不同的行为。

C++面向对象的特点

C++ 是一种支持面向对象编程的语言,具有以下特点:

  • 静态类型:变量在声明时必须指定类型。
  • 强类型:类型必须严格匹配,不允许类型隐式转换。
  • 支持多继承:一个类可以继承多个基类。
  • 支持接口:可以定义纯虚函数来实现接口。
  • 支持模板:可以编写通用的代码,适用于多种数据类型。

以下是一些示例代码,以展示这些特点:

class StaticTypeExample {
public:
    StaticTypeExample() {
        int x = 10;  // 变量需要明确类型
    }

    void useStrongType() {
        int a = 10;
        double b = 10.0;
        // a = b;  // 类型严格匹配,不允许隐式转换
    }
};

class InheritanceExample : public StaticTypeExample {
public:
    void display() {
        std::cout << "This class inherits from StaticTypeExample" << std::endl;
    }
};

类与对象

类的定义与使用

在 C++ 中,class 关键字用于定义一个类。类中可以包含成员变量和成员函数。以下是一个简单的类定义示例:

class Person {
public:
    // 成员变量
    std::string name;
    int age;

    // 构造函数
    Person(std::string n, int a) : name(n), age(a) {}

    // 成员函数
    void display() {
        std::cout << "Name: " << name << ", Age: " << age << std::endl;
    }
};

在这个示例中:

  • nameage 是成员变量。
  • Person(std::string n, int a) 是构造函数。
  • display() 是成员函数,用于输出对象的信息。

对象的创建与使用

创建一个类的对象很简单,只需使用类名加上圆括号即可。以下是如何创建 Person 类的对象并调用其成员函数:

int main() {
    // 创建 Person 类的对象
    Person p("Alice", 30);

    // 调用成员函数
    p.display();

    return 0;
}

上述代码会输出:

Name: Alice, Age: 30

成员变量与成员函数

成员变量的定义与作用

成员变量用于存储对象的数据。以下是一个示例,展示了如何定义成员变量并使用它们:

class Rectangle {
public:
    // 成员变量
    double width;
    double height;

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

    // 成员函数
    double area() {
        return width * height;
    }
};

在这个示例中:

  • widthheight 是成员变量。
  • Rectangle(double w, double h) 是构造函数。
  • area() 是成员函数,用于计算矩形的面积。

成员函数的定义与使用

成员函数用于操作对象的数据。以下是如何定义和使用成员函数的示例:

class Circle {
public:
    // 成员变量
    double radius;

    // 构造函数
    Circle(double r) : radius(r) {}

    // 成员函数
    double circumference() {
        return 2 * M_PI * radius;
    }
};

在这个示例中:

  • radius 是成员变量。
  • Circle(double r) 是构造函数。
  • circumference() 是成员函数,用于计算圆的周长。

构造函数与析构函数

构造函数的定义与作用

构造函数是用于初始化对象的特殊函数。构造函数的名字与类名相同,没有返回类型,且不能有返回值。以下是一个构造函数的示例:

class Point {
public:
    // 成员变量
    double x;
    double y;

    // 构造函数
    Point(double x, double y) : x(x), y(y) {}

    // 成员函数
    void display() {
        std::cout << "Point: (" << x << ", " << y << ")" << std::endl;
    }
};

在这个示例中:

  • Point(double x, double y) 是构造函数。
  • display() 是成员函数,用于输出点的坐标。

析构函数的定义与作用

析构函数是在对象生命周期结束时自动调用的特殊函数。析构函数的名字与类名相同,前面加上 ~ 符号。以下是一个析构函数的示例:

class Resource {
public:
    // 成员变量
    int id;

    // 构造函数
    Resource(int id) : id(id) {
        std::cout << "Resource " << id << " is created" << std::endl;
    }

    // 析构函数
    ~Resource() {
        std::cout << "Resource " << id << " is destroyed" << std::endl;
    }
};

在这个示例中:

  • Resource(int id) 是构造函数。
  • ~Resource() 是析构函数。
  • 析构函数用于清理资源,例如释放内存。

继承与多态

继承的基本概念与实现

继承是一种机制,使得一个类可以继承另一个类的属性和方法。基类(父类)定义了一个通用的接口,派生类(子类)可以继承这些特性并进行扩展。以下是一个继承的示例:

class Vehicle {
public:
    // 成员变量
    std::string make;
    std::string model;

    // 构造函数
    Vehicle(std::string make, std::string model) : make(make), model(model) {}

    // 成员函数
    void display() {
        std::cout << "Vehicle: " << make << " " << model << std::endl;
    }
};

class Car : public Vehicle {
public:
    // 成员变量
    int seats;

    // 构造函数
    Car(std::string make, std::string model, int seats) : Vehicle(make, model), seats(seats) {}

    // 成员函数
    void display() {
        Vehicle::display();
        std::cout << "Seats: " << seats << std::endl;
    }
};

在这个示例中:

  • Vehicle 是基类。
  • Car 是派生类,继承自 Vehicle
  • Car 有自己的成员变量 seats 和构造函数。
  • Car 重写了 display() 成员函数。

多态的概念与使用

多态是指同一个类的对象可以表现出不同的行为。通过虚函数和接口,可以实现多态。以下是一个多态的示例:

class Animal {
public:
    // 虚函数
    virtual void sound() = 0;
};

class Dog : public Animal {
public:
    // 实现虚函数
    void sound() override {
        std::cout << "Dog: Bark!" << std::endl;
    }
};

class Cat : public Animal {
public:
    // 实现虚函数
    void sound() override {
        std::cout << "Cat: Meow!" << std::endl;
    }
};

在这个示例中:

  • Animal 是基类,定义了一个纯虚函数 sound()
  • DogCat 是派生类,实现了 sound() 成员函数。
  • 通过多态,可以使用一个基类指针指向不同的派生类对象,并根据对象的实际类型调用不同的 sound() 函数。

封装与接口

封装的基本概念与实现

封装是指将数据和操作数据的方法组合在一起,对外部隐藏内部细节。通过访问控制符可以控制成员变量和成员函数的访问权限。以下是一个封装的示例:

class BankAccount {
private:
    // 私有成员变量
    std::string accountNumber;
    double balance;

public:
    // 公有成员函数
    BankAccount(std::string accountNumber, double initialBalance) : accountNumber(accountNumber), balance(initialBalance) {}

    void deposit(double amount) {
        balance += amount;
    }

    void withdraw(double amount) {
        if (amount <= balance) {
            balance -= amount;
        } else {
            std::cout << "Insufficient funds." << std::endl;
        }
    }

    double getBalance() const {
        return balance;
    }
};

在这个示例中:

  • accountNumberbalance 是私有成员变量。
  • deposit()withdraw() 是公有成员函数。
  • getBalance() 是公有成员函数,用于获取余额。

接口的设计与使用

接口是指定义一组方法的抽象类。接口可以定义纯虚函数,派生类必须实现这些函数。以下是一个接口的示例:

class Drawable {
public:
    // 纯虚函数
    virtual void draw() = 0;
};

class Circle : public Drawable {
public:
    void draw() override {
        std::cout << "Drawing a Circle" << std::endl;
    }
};

class Rectangle : public Drawable {
public:
    void draw() override {
        std::cout << "Drawing a Rectangle" << std::endl;
    }
};

在这个示例中:

  • Drawable 是接口类,定义了一个纯虚函数 draw()
  • CircleRectangle 是派生类,实现了 draw() 成员函数。

通过以上示例,可以更好地理解 C++ 中面向对象编程的基本概念和实现方式。掌握这些概念和技巧,可以使代码更加模块化、可复用和易于维护。推荐学习网站 慕课网 提供了大量的 C++ 编程课程和资源,可以帮助你进一步深入学习。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP