首页 > 编程语言 >十四天学会C++之第四天(面向对象编程基础)

十四天学会C++之第四天(面向对象编程基础)

时间:2023-10-06 18:31:40浏览次数:44  
标签:十四天 函数 示例 对象 成员 C++ 面向对象编程 Student 定义

十四天学会C++之第四天(面向对象编程基础)_C++

类和对象是什么?

在C++中,是一种用户定义的数据类型,它可以包含数据成员(也就是属性)和成员函数(也就是方法)。类是一种模板或蓝图,用于创建具体的对象。

对象是类的实例,它是根据类的定义创建的,可以用来表示现实世界中的各种事物。对象具有类定义的属性和行为。

面向对象编程思想

面向对象编程(OOP)是一种编程范式,强调将现实世界的概念映射到类和对象上。这种思想使得代码更加模块化、可维护性更强,更容易理解。

举个例子,如果我们要编写一个程序来模拟汽车的行为,我们可以创建一个名为Car的类。这个类可以有属性,如颜色、速度等,以及方法,如加速、刹车等。然后,我们可以根据这个类创建多个汽车对象,每个对象都代表现实世界中的一辆汽车。

C++中的类和对象示例

类和对象的基本概念:

#include <iostream>
using namespace std;

// 定义一个类
class Car {
public:
    // 属性
    string color;
    int speed;

    // 方法
    void start() {
        cout << "Car started." << endl;
    }

    void accelerate() {
        speed += 10;
        cout << "Accelerating. Speed: " << speed << " km/h" << endl;
    }
};

int main() {
    // 创建两个Car对象
    Car car1;
    Car car2;

    // 设置属性
    car1.color = "Red";
    car1.speed = 0;

    car2.color = "Blue";
    car2.speed = 0;

    // 调用方法
    car1.start();
    car1.accelerate();

    car2.start();
    car2.accelerate();

    return 0;
}

运行结果:

十四天学会C++之第四天(面向对象编程基础)_成员变量_02

在示例中,我们定义了一个Car类,它有两个属性(colorspeed)和两个方法(startaccelerate)。然后,我们创建了两个Car对象car1car2,并分别设置了它们的属性,最后调用了对象的方法。

成员变量和成员函数是什么?

在C++类中,成员变量是用来存储对象的属性或数据的变量。它们描述了对象的状态。成员变量也被称为类的数据成员。

成员函数是与类相关联的函数,它们定义了对象的行为和操作。成员函数也被称为类的成员操作或方法。

声明和定义成员变量

在C++中,成员变量通常在类的声明部分进行声明,然后在类的定义部分进行定义。

class Student {
public:
    // 声明成员变量
    string name;
    int age;

    // 其他成员函数...
};

// 在类的定义部分初始化成员变量
Student::Student() {
    name = "John";
    age = 20;
}

在示例中,我们声明了两个成员变量nameage,然后在类的定义部分使用构造函数对它们进行初始化。

声明和定义成员函数

成员函数通常在类的声明部分进行声明,然后在类的定义部分进行定义。

class Student {
public:
    // 成员函数的声明
    void setName(string n);
    void setAge(int a);

    // 其他成员变量...

private:
    string name;
    int age;
};

// 成员函数的定义
void Student::setName(string n) {
    name = n;
}

void Student::setAge(int a) {
    age = a;
}

在示例中,我们声明了两个成员函数setNamesetAge,然后在类的定义部分进行了定义。这些成员函数用于设置成员变量nameage的值。

使用成员变量和成员函数

一旦类的成员变量和成员函数被声明和定义,我们可以通过创建类的对象来使用它们。例如:

int main() {
    Student student1;
    student1.setName("Alice");
    student1.setAge(22);

    // 其他操作...

    return 0;
}

在示例中,我们创建了一个Student对象student1,然后使用成员函数setNamesetAge来设置对象的属性。

构造函数和析构函数是什么?

构造函数是一种特殊的成员函数,用于在对象被创建时初始化对象的成员变量。构造函数的名称与类名相同,它没有返回值。在C++中,每个类都可以有一个或多个构造函数。

析构函数也是一种特殊的成员函数,用于在对象被销毁时清理对象的资源。析构函数的名称与类名相同,但前面有一个波浪号(~)。在C++中,每个类都可以有一个析构函数。

构造函数的示例

下面是一个构造函数的示例:

class Student {
public:
    // 构造函数
    Student(string n, int a) {
        name = n;
        age = a;
    }

    // 其他成员函数...

private:
    string name;
    int age;
};

在示例中,我们定义了一个接受两个参数的构造函数,用于初始化nameage成员变量。

析构函数的示例

下面是一个析构函数的示例:

class Student {
class Student {
public:
    // 构造函数
    Student(string n, int a) {
        name = n;
        age = a;
    }

    // 其他成员函数...

private:
    string name;
    int age;
};public:
    // 构造函数
    Student(string n, int a) {
        name = n;
        age = a;
    }

    // 析构函数
    ~Student() {
        // 清理资源的代码
    }

    // 其他成员函数...

private:
    string name;
    int age;
};

在示例中,我们定义了一个析构函数,它可以用于清理对象的资源,例如释放动态分配的内存。

使用构造函数和析构函数

构造函数在创建对象时自动调用,而析构函数在对象被销毁时自动调用。例如:

int main() {
    // 创建对象时调用构造函数
    Student student1("Alice", 22);

    // 对象销毁时调用析构函数
    // 不需要手动调用析构函数,它会自动执行清理操作

    return 0;
}

封装、继承和多态是什么?

这三个概念是面向对象编程的核心,它们分别是:

  1. 封装(Encapsulation):封装是将数据和操作数据的方法捆绑在一起的概念。类中的成员变量和成员函数可以被封装在一起,从外部只能访问类的公有接口,而不能直接访问内部的实现细节。
  2. 继承(Inheritance):继承允许一个类继承另一个类的属性和方法。子类可以继承父类的成员,并且可以添加新的成员或修改继承的成员。这提高了代码的重用性和可维护性。
  3. 多态(Polymorphism):多态允许不同的对象对相同的消息作出不同的响应。这意味着具有不同类的对象可以对相同的方法调用做出不同的响应。多态性通过虚函数和抽象类实现。

封装的示例

下面是一个封装的示例:

class Circle {
public:
    // 构造函数
    Circle(double r) {
        radius = r;
    }

    // 计算面积的方法
    double calculateArea() {
        return 3.14159 * radius * radius;
    }

private:
    double radius;
};

在示例中,radius成员变量被封装在Circle类中,外部代码无法直接访问它。

继承的示例

下面是一个继承的示例:

class Animal {
public:
    void eat() {
        cout << "Animal is eating." << endl;
    }
};

class Dog : public Animal {
public:
    void bark() {
        cout << "Dog is barking." << endl;
    }
};

在示例中,Dog类继承了Animal类的eat方法,同时添加了自己的bark方法。

多态的示例

下面是一个多态的示例:

class Shape {
public:
    virtual void draw() {
        cout << "Drawing a shape." << endl;
    }
};

class Circle : public Shape {
public:
    void draw() override {
        cout << "Drawing a circle." << endl;
    }
};

class Square : public Shape {
public:
    void draw() override {
        cout << "Drawing a square." << endl;
    }
};

在示例中,Shape类定义了一个虚函数draw,而CircleSquare类分别重写了这个函数。当我们通过基类指针调用draw方法时,具体执行哪个子类的方法取决于对象的实际类型。

类和对象的概念

在C++中,类是一种用户定义的数据类型,它用于封装数据和操作数据的方法。类定义了一种对象的结构,包括它的属性(成员变量)和行为(成员函数)。对象是类的实例,是具体的数据。

让我们从一个简单的示例开始:

// 定义一个类
class Student {
public:
    // 成员变量
    string name;
    int age;

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

int main() {
    // 创建一个Student对象
    Student s;

    // 设置对象的属性
    s.name = "Alice";
    s.age = 20;

    // 调用对象的方法
    s.display();

    return 0;
}

在示例中,我们定义了一个Student类,它有两个成员变量nameage,以及一个成员函数display用于显示学生信息。然后,我们创建了一个Student对象s,设置了对象的属性并调用了成员函数。

示例代码

  • 创建一个类Car,包含成员变量brand(品牌)和price(价格),以及成员函数showInfo用于显示车辆信息。
class Car {
public:
    string brand;
    double price;

    void showInfo() {
        cout << "Brand: " << brand << ", Price: $" << price << endl;
    }
};
  • main函数中,创建两个Car对象并设置它们的属性,然后调用showInfo方法显示信息。
int main() {
    Car car1;
    car1.brand = "Toyota";
    car1.price = 25000.0;

    Car car2;
    car2.brand = "Honda";
    car2.price = 22000.0;

    car1.showInfo();
    car2.showInfo();

    return 0;
}

练习题

  1. 创建一个类Rectangle表示矩形,包含成员变量width(宽度)和height(高度),以及成员函数calculateArea用于计算矩形的面积。
  2. main函数中,创建一个Rectangle对象,设置其宽度和高度,然后调用calculateArea方法计算并显示面积。

创建一个Rectangle类表示矩形时,首先要定义类的成员变量和成员函数。在main函数中,我们可以创建一个Rectangle对象并调用其成员函数来计算面积并显示。

#include <iostream>

using namespace std;

// 创建一个类 Rectangle 表示矩形
class Rectangle {
public:
    // 成员变量,表示矩形的宽度和高度
    double width;
    double height;

    // 成员函数,用于计算矩形的面积
    double calculateArea() {
        return width * height;
    }
};

int main() {
    // 创建一个 Rectangle 对象
    Rectangle myRectangle;

    // 设置矩形的宽度和高度
    myRectangle.width = 5.0;
    myRectangle.height = 3.0;

    // 调用 calculateArea 方法计算面积
    double area = myRectangle.calculateArea();

    // 显示矩形的面积
    cout << "矩形的面积是: " << area << endl;

    return 0;
}

运行结果:

十四天学会C++之第四天(面向对象编程基础)_C语言_03

解答说明:

  1. 首先定义一个Rectangle类,其中包含了两个成员变量widthheight,以及一个成员函数calculateArea用于计算矩形的面积。
  2. main函数中,创建一个名为myRectangleRectangle对象。
  3. 设置myRectangle对象的widthheight属性为5.0和3.0。
  4. 调用calculateArea方法计算矩形的面积,并将结果存储在area变量中。
  5. 最后,使用cout输出矩形的面积。

运行这段代码,你将得到输出结果:矩形的面积是: 15。

一个简单的类和对象,并在类中定义成员函数来执行操作。可以根据这个示例来创建更复杂的类和对象,并定义更多的成员函数来完成不同的任务。

创建一个Rectangle类表示矩形时,首先要定义类的成员变量和成员函数。在main函数中,可以创建一个Rectangle对象并调用其成员函数来计算面积并显示。

#include <iostream>

using namespace std;

// 创建一个类 Rectangle 表示矩形
class Rectangle {
public:
    // 成员变量,表示矩形的宽度和高度
    double width;
    double height;

    // 成员函数,用于计算矩形的面积
    double calculateArea() {
        return width * height;
    }
};

int main() {
    // 创建一个 Rectangle 对象
    Rectangle myRectangle;

    // 设置矩形的宽度和高度
    myRectangle.width = 5.0;
    myRectangle.height = 3.0;

    // 调用 calculateArea 方法计算面积
    double area = myRectangle.calculateArea();

    // 显示矩形的面积
    cout << "矩形的面积是: " << area << endl;

    return 0;
}

运行结果:

十四天学会C++之第四天(面向对象编程基础)_C语言_04

解答说明:

  1. 首先定义了一个Rectangle类,其中包含了两个成员变量widthheight,以及一个成员函数calculateArea用于计算矩形的面积。
  2. main函数中,创建一个名为myRectangleRectangle对象。
  3. 设置myRectangle对象的widthheight属性为5.0和3.0。
  4. 调用calculateArea方法计算矩形的面积,并将结果存储在area变量中。
  5. 最后,使用cout输出矩形的面积。

运行这段代码,你将得到输出结果:矩形的面积是: 15。

创建一个简单的类和对象,并在类中定义成员函数来执行操作。可以根据这个示例来创建更复杂的类和对象,并定义更多的成员函数来完成不同的任务。

标签:十四天,函数,示例,对象,成员,C++,面向对象编程,Student,定义
From: https://blog.51cto.com/u_15747017/7726824

相关文章

  • C++断言之assert和static_assert的区别
    C++断言之assert和static_assert的区别参考链接:c++11:static_assert与assert_夜夜夜夜-CSDN博客_static_assert断言分为动态断言和静态断言2种。c++11引入了static_assert关键字,用来实现编译期间的断言,叫静态断言。1.static_assert静态断言static_assert(常量表达式,要提示......
  • C++ 信号
    信号概念信号是Linux进程间通信的一种机制,是软件层次上对中断的一种模拟,用在进程之间的传递消息。来源内核产生内存错误,除0错误等由其他进程产生,传递给目标进程kill信号自定义信号:SIGURG硬件产生键盘处理方式发送阶段内核将信号放到对应的pendi......
  • C++算法之旅、08 基础篇 | 质数、约数
    质数在>1的整数中,如果只包含1和本身这两个约数,就被称为质数(素数)866试除法判定866.试除法判定质数-AcWing题库\(O(n)\)boolisprime(intx){if(x<2)returnfalse;for(inti=2;i<x;i++)if(x%i==0)returnfalse;returntrue;......
  • Learning Hard C# 学习笔记: 5.C#中的面向对象编程
    目前除C#外流行的面向对象编程的几个语言分别是:Java,C++等;面向对象的语言都具有以下特征:封装-将客观事物封装成类,并将类内部的实现隐藏,以保证数据的完整性;继承-子类通过继承可以复用父类的代码;多态-允许将子对象赋值给父对象的一种能力.5.1封装封装指的是......
  • 14_C++对c的扩展
    c++对c的扩展::作用域运算符::使用全局变量usingnamespacestd;inta=10;voidtest01(){inta=20;cout<<a<<endl;//20cout<<::a<<endl;//10}命名空间namespacenamespace和c语言中static只在本源文件中有效差不多命名空间使用语法创建一......
  • C++ 数据结构插入效率学习
    转自:https://blog.csdn.net/breaksoftware/article/details/829478381.总结在头部插入。元素数量>15k时,效率unordered_set>set,unordered_map>map。元素数量<1024时,效率unordered_set>set,map> unordered_map。元素数量<256时,效率unordered_set>set,map> unorder......
  • C++ namespace User_Unauthorized version 1.0.0 is officially released
    CodenamespaceUser_Unauthorized{/***@briefThisisaheaderfileforcompetitiveprogramming.*@authorUser-Unauthorized*@version1.0.0*@date2023-10-5*/typedeflonglongvalueType;typedefstd::vector<......
  • C++ Profiler Introduction [CPU Time Only]
    C++ProfilerIntroduction[CPUTimeOnly]author:LastWhisperdate:2023/10/05ThereareseveralprofilersforC++.Basedonmyresearch,I'vefoundthattracyisthemostpowerful.However,it'schallengingtoconfigure.Toquicklybenchmark......
  • C/C++学习 -- HMAC算法
    1.HMAC算法概述HMAC,全称为HMAC-MD5、HMAC-SHA1、HMAC-SHA256等,是一种在数据传输中验证完整性和认证来源的方法。它结合了哈希函数和密钥,通过在数据上应用哈希函数,生成一个带密钥的散列值,用于验证数据的完整性。HMAC算法广泛应用于网络协议、数字签名、认证和访问控制等领域。2.HM......
  • 用C++写的一个万用哈希函数模板
    用C++写的一个万用哈希函数模板template<typenameT>inlinevoidhash_combine(size_t&seed,constT&val){seed^=hash<T>()(val)+0x9e3779b9+(seed<<6)+(seed<<2);}template<typenameT,typename......