跳转到内容

C++/对象简介

来自维基教科书,开放的书籍,开放的世界

由于 C++ 是一种面向对象的编程语言,您将经常使用类、对象和方法。这一切背后的理念是创建一个“模板”,供您或其他程序员使用,而无需不断地使用相同的实用性定义新的变量和函数。这就是对象被称为对象的原因,它们代表类的实例。一个很好的例子是使用现实世界的参考,尽管它与任何物理对象都没有字面意义。现在我教授类和对象的方法与我的老师截然不同。他们首先会教你如何使用对象,然后教你如何创建一个类。但我将以相反的方式进行,因为在类上有良好的基础更有意义,因为对象依赖于类。现在,这里是我创建的类的代码

class Book
{
    public:
        int Copies;

    private:
        string Name;
        string Author;
        int Pages;
}

对于第一行,class Book,您正在创建一个名为 Book 的新类。然后在这个代码块中,有两个关键元素,public 和 private。总共有三种封装方法,public、private 和 protected。每个方法都使用  : 后面跟着它。这样做是为了组织哪些变量位于哪里。public 表示您可以在类外部编辑变量。private 表示您无法在类外部编辑变量。封装将在后面讨论。在每个不同的封装中,都有不同数量的变量,它们具有不同的类型。注意每个变量的位置,Copies 位于 public 下,而 Name、Author 和 Pages 位于 private 下。由于您无法在类外部编辑私有数据,因此我们需要创建 **方法** 来更改这些值。实现方法是在类中创建一个新函数。我们将创建三个新方法来更改私有数据。

class Book
{
    public:
        int Copies;

        void editName(string inName) //this will edit the Name value while staying inside the class. Keep these kinds of functions inside public.
        {
            Name = inName;
        }

        void editAuthor(string inAuthor) //this will edit the Author value while staying inside the class.
        {
            Author = inAuthor;
        }


        void editPages(int inPages) //this will edit the Pages value while staying inside the class.
        {
            Pages = inPages;
        }

    private:
        string Name;
        string Author;
        int Pages;
}

现在我们已经设置了一个基本类,让我们看看如何使用它。

int main()
{
    Book Pre_cal; //Creates a new instance of the class Book, with the variable named being called Pre_cal
    Pre_cal.Copies = 1000;//since Copies is public, we can just edit the value directly, without having to create/call a method to change it, although you may still do that.
    Pre_cal.editName("Precalculus with Trigonometry");//To use the method editName, we use this line, with the string argument as the name of the book
    Pre_cal.editAuthor("Paul A. Foerster");//same concept, uses the method editAuthor to change the value of Author
    Pre_Cal.editPages(848);//once again, does the same thing, but to Pages

    return 0;
}

每当我们想要访问类内部的某些内容时,我们都会在变量名后面加上一个点,然后是我们要调用的方法。由于 Book 类中的 Copies 变量是公共的,因此我们不必通过创建方法来更改它而绕弯。我把它设为公共的,因为通常情况下,人们会购买书籍,从而更改该值。但这并不能阻止我们创建方法来更改该值。我们可以在类中创建以下方法

    public:
        void singlePurchase()
        {
            Copies--; // shorter way of saying Copies = Copies - 1
        }

因此,我们不再每次都更改它,而是直接调用该方法,它会自动更改该值。要使用它,我们只需像使用 edit 方法一样调用它即可

    Pre_cal.singlePurchase();

就这样完成了。当然,这并不能阻止该值变为负数。为了防止这种情况,我们只需在该方法中添加以下内容即可

    public:
        void singlePurchase()
        {
            if(Copies>0)
                Copies--; // shorter way of saying Copies = Copies - 1
        }

现在,只有当 Copies 的值大于 0 时,该值才会发生变化。

存在一个问题,我们可以更改私有变量的值,但我们无法读取它。为了解决这个问题,我们可以这样做

    public:
        string Name()
        {
            return Name;
        }

        string Author()
        {
            return Author;
        }

        int Pages()
        {
            return Pages;
        }

现在您可能已经理解了 return 语句的用处。让我们看看它是如何使用的

int main()
{
    Book Pre_cal;
    Pre_cal.editPages(848);
    int PagesInMyBook = Pre_cal.Pages();

    return 0;
}

由于我们设置了 Pages 的值,所以 Pages 现在等于 848。因此,当我们返回 Pages 时,它会返回 Pages 的值,该值反过来用于设置 PagesInMyBook 的值。因此,在程序结束时,PagesInMyBook 的值等于 848。

此页面将继续完善。

华夏公益教科书