了解在OOP中返回和传递自定义对象的目的 首先,我要告诉你,编程是我的爱好,喜欢编程,即使我在大学C++中已经使用了一些编程类,并且在C++ Qt、ObjuleC、PHP和现在Swift中创建了一些小程序,但我从来没有必要大量使用除了创建实例之外的自定义对象,从这些对象调用一些函数/方法,或者从一个对象继承到另一个对象,这些都非常简单。有一件事一直困扰着我,我认为是OOP世界的核心,那就是理解创建和使用自定义对象的概念。我知道这个问题我早就应该问了,真丢脸

了解在OOP中返回和传递自定义对象的目的 首先,我要告诉你,编程是我的爱好,喜欢编程,即使我在大学C++中已经使用了一些编程类,并且在C++ Qt、ObjuleC、PHP和现在Swift中创建了一些小程序,但我从来没有必要大量使用除了创建实例之外的自定义对象,从这些对象调用一些函数/方法,或者从一个对象继承到另一个对象,这些都非常简单。有一件事一直困扰着我,我认为是OOP世界的核心,那就是理解创建和使用自定义对象的概念。我知道这个问题我早就应该问了,真丢脸,php,c++,swift,class,oop,Php,C++,Swift,Class,Oop,有人能如此友善地创建一个快速简单的示例,说明在创建自定义对象时通常涉及的功能和方式吗 这里我使用的是Swift,但它可以是任何其他语言: // custom object class ClassA{ // what functionality could fit here } class ClassB{ init(customObject:ClassA){ // when would you pass a custom object to this cl

有人能如此友善地创建一个快速简单的示例,说明在创建自定义对象时通常涉及的功能和方式吗

这里我使用的是Swift,但它可以是任何其他语言:

// custom object
class ClassA{

    // what functionality could fit here
}

class ClassB{

     init(customObject:ClassA){
         // when would you pass a custom object to this class?
     {

        func returnCustomObjec()->ClassA{
        // when would you return a custom object?
    }
        func passCustomObject(customObjec:ClassA){
        // when would you pass a custom object?
    }
}

仅供参考-我知道何时返回或传递、Stings、Ints、Double等。但我想知道在实际程序中何时创建返回或接受自定义对象的函数才有意义。

IMHO自定义对象的最基本用途是返回函数类型。假设我想编写一个返回int、double和字符串的函数,那么我可以通过传递引用来实现这一点:

void foo(int& a,double& b,string& c);
但是,通过这种方式,不太清楚这些参数是否仅用于返回值。而且现在调用者必须注意声明和初始化这3个变量,并且必须给它们合理的名称。如果返回类型是轻量级的,并且复制不是问题,那么可以这样做:

struct foo_returnType {
    int a;
    double b;
    string c;
}

foo_returnType foo();

现在,它的返回值还是参数没有任何混淆,更重要的是,如果函数返回这3个参数,它们很可能在逻辑上属于一起,这应该反映在代码中。我可以给他们一个合理的名称,可能比foo_returnType更好,为了方便起见,我可以为这种新类型提供一些更好的功能,例如重载ostreamsIMHO自定义对象最基本的用途是函数的返回类型。假设我想编写一个返回int、double和字符串的函数,那么我可以通过传递引用来实现这一点:

void foo(int& a,double& b,string& c);
但是,通过这种方式,不太清楚这些参数是否仅用于返回值。而且现在调用者必须注意声明和初始化这3个变量,并且必须给它们合理的名称。如果返回类型是轻量级的,并且复制不是问题,那么可以这样做:

struct foo_returnType {
    int a;
    double b;
    string c;
}

foo_returnType foo();

现在,它的返回值还是参数没有任何混淆,更重要的是,如果函数返回这3个参数,它们很可能在逻辑上属于一起,这应该反映在代码中。我可以给他们一个合理的名字,也许比foo_returnType更好,为了方便起见,我可以为这种新类型提供一些更好的功能,例如重载ostreams哦,天啊,有很多很多这样的情况。我刚刚在opengl中制作了一些处理统一着色器的对象。请参阅我的简化代码。这里涉及到很多对象:

Shader ShaderManager::load(Camera* camera, Entity* entity) {
    Shader shader;

    shader.addUniform("transform", make_unique<TransformUniform>(camera));
    shader.addUniform("color", make_unique<Vec4Uniform>(entity->getColor()));

    return shader;
}

甚至颜色也是一个对象,一个非常简单的结构,但仍然是一个对象。我很少处理原语,但是我的一些对象又是原始的,我是C++的,动态分配是一个选择< /p> < p>哦,我的,有很多很多的例子。我刚刚在opengl中制作了一些处理统一着色器的对象。请参阅我的简化代码。这里涉及到很多对象:

Shader ShaderManager::load(Camera* camera, Entity* entity) {
    Shader shader;

    shader.addUniform("transform", make_unique<TransformUniform>(camera));
    shader.addUniform("color", make_unique<Vec4Uniform>(entity->getColor()));

    return shader;
}

甚至颜色也是一个对象,一个非常简单的结构,但仍然是一个对象。我很少处理原语,但是我的一些对象也起到了原始的作用,我在C++中,动态分配是一个选择< /p> < p>我有一个PHP后台。我用C++和java来解决一些问题,但是这个答案是在PHP的观点。 在php中,自定义对象是在java中实际执行操作的对象。如果我理解正确,有很多库,在没有任何自定义对象的情况下可以执行很多操作。即,表示业务实体的对象,如发票或销售项目,或表示应用程序的对象,如http响应对象或模板解析器对象

传递和返回自定义对象可确保方法具有可预测的行为,即不在对象上调用不存在的方法,确保如果在方法中键入hint接口,则实现sumable接口的任何对象都可以被sumable


传递和返回cutom对象的目的是确保应用程序的行为安全

我有一个php背景。我用C++和java来解决一些问题,但是这个答案是在PHP的观点。 在php中,自定义对象是在java中实际执行操作的对象。如果我理解正确,有很多库,在没有任何自定义对象的情况下可以执行很多操作。也就是说,表示b的对象 业务实体,如发票或销售项目,或表示应用程序的实体,如http响应对象或模板解析器对象

传递和返回自定义对象可确保方法具有可预测的行为,即不在对象上调用不存在的方法,确保如果在方法中键入hint接口,则实现sumable接口的任何对象都可以被sumable



传递和返回cutom对象的目的是确保应用程序的行为安全

这似乎是一个非常广泛的主题,最好从书本上学习或在Internet上搜索主题。涵盖对象的优点的范围非常广泛。QT中充满了对象,因此如果您熟悉它,那么您应该能够确定为什么以及如何使用对象。如果没有上下文,我们无法告诉您如何在示例中使用对象。其中一种用法是依赖项注入。搜索依赖项Injection@fs_tigre几乎任何C++书籍都应该有一个面向对象编程的部分,以及它解决了什么问题。我已经构建了很多自定义对象,并经常使用继承,但我从未将这些类型传递给其他类。这似乎是一个非常广泛的主题,您最好从书本上学习或在Internet上搜索主题。涵盖对象的优点的范围非常广泛。QT中充满了对象,因此如果您熟悉它,那么您应该能够确定为什么以及如何使用对象。如果没有上下文,我们无法告诉您如何在示例中使用对象。其中一种用法是依赖项注入。搜索依赖项Injection@fs_tigre几乎任何C++书籍都应该有一个面向对象编程的部分,以及它解决了什么问题。我已经构建了很多自定义对象,并经常使用继承,但我从未将这些类型传递给其他类。我认为主要的一点是,它们很可能在逻辑上属于同一类。对象用于封装应用于单个对象的属性实例。猫有胡须、皮毛、呼噜声和猛扑声。一辆汽车有四个轮子,一个引擎,可以朝着给定的方向前进或后退。@crush我记得学校讲过一个有轮子和引擎的汽车的故事,但我总是想知道,猫身上长着毛,发出呼噜声,这些东西来自猫的例子,通常用来说明多态性/继承性。你从一个基本的动物或哺乳动物类开始,然后将其专门化为一只猫。这个想法是为了说明对象封装了定义所述对象的属性和动作。@fs_tigre被愚蠢的老师用他们所有的汽车和动物误导了。我很久以来一直认为继承是上课的要点。出于某种原因,我开始真正喜欢C++的时候,我意识到继承可以很好,但它绝对不是拥有自定义类型/类的主要优点。确切地说,我觉得我缺少使用自定义类的真正目的。我认为主要是很可能它们是逻辑上的。对象用于封装应用于单个对象的属性实例。猫有胡须、皮毛、呼噜声和猛扑声。一辆汽车有四个轮子,一个引擎,可以朝着给定的方向前进或后退。@crush我记得学校讲过一个有轮子和引擎的汽车的故事,但我总是想知道,猫身上长着毛,发出呼噜声,这些东西来自猫的例子,通常用来说明多态性/继承性。你从一个基本的动物或哺乳动物类开始,然后将其专门化为一只猫。这个想法是为了说明对象封装了定义所述对象的属性和动作。@fs_tigre被愚蠢的老师用他们所有的汽车和动物误导了。我很久以来一直认为继承是上课的要点。出于某种原因,我开始真正喜欢C++的时候,我意识到继承是不错的,但它绝对不是拥有自定义类型/类的主要优点。确切地说,我觉得我缺少使用自定义类的真正目的。Guillaume Racicot -我想你的例子接近我想了解的。但有几件事我并不完全理解。在您的示例中,您有一个返回类型着色器的方法,但它被声明为void。这不应该是着色器着色器管理器::loadCamera*camera,Entity*Entity{//…}?哦,是的,抱歉,一定是输入错误。谢谢你的更正。纪尧姆·拉西科特-我越来越近了,现在让我看看我是否理解这个概念。在类着色器中实现的addUniform方法正确吗?如果我的假设是正确的,我现在就知道了……没错。addUniform将唯一的_ptr作为参数,并将其存储在列表中。结构和类只是一种表达概念的方式,也是一种表达概念的方式
把事情做成一个整体。所以着色器封装了着色器背后的所有逻辑,并且需要处理一致性。对象是一种使用名称对数据和逻辑进行分组的方法。非常感谢这个示例,我只需要一个示例来了解这个概念。我会继续阅读更多关于它的文章——纪尧姆·拉西科特——我认为你们的例子接近我想要理解的。但有几件事我并不完全理解。在您的示例中,您有一个返回类型着色器的方法,但它被声明为void。这不应该是着色器着色器管理器::loadCamera*camera,Entity*Entity{//…}?哦,是的,抱歉,一定是输入错误。谢谢你的更正。纪尧姆·拉西科特-我越来越近了,现在让我看看我是否理解这个概念。在类着色器中实现的addUniform方法正确吗?如果我的假设是正确的,我现在就知道了……没错。addUniform将唯一的_ptr作为参数,并将其存储在列表中。结构和类只是将一个概念和一种处理方法放入一个构造中的一种方式。所以着色器封装了着色器背后的所有逻辑,并且需要处理一致性。对象是一种使用名称对数据和逻辑进行分组的方法。非常感谢这个示例,我只需要一个示例来了解这个概念。我会继续读更多关于它的书