首先让我告诉你,编程是我的爱好(热爱编程),即使我已经在大学(C ++)学习了一些编程课程,并用C ++(QT)创建了一些小程序,Objective-C,PHP而现在Swift,我从来没有需要大量使用除了创建实例之外的自定义对象,从这些对象调用一些函数/方法或者从一个对象继承,所有这些都非常简单。困扰我的一件事,我认为是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 class?
{
func returnCustomObjec()->ClassA{
// when would you return a custom object?
}
func passCustomObject(customObjec:ClassA){
// when would you pass a custom object?
}
}
仅供参考 - 我知道何时返回或通过,Stings,Ints,Doubles等,但我想知道何时创建在真实程序中返回或接受自定义对象的函数是有意义的。
答案 0 :(得分:2)
恕我直言,自定义对象的最基本用途是返回类型的函数。假设我想写一个函数返回int
一个double
和一个string
然后我可以通过传递引用来做到这一点:
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<<运算符,用一些打印屏幕上的类型关于3个参数含义的其他有意义的信息)。
答案 1 :(得分:1)
哦,我的,有很多案例可以解决这个问题。我刚刚制作了一些处理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 ++中,动态分配是一种选择)
答案 2 :(得分:1)
我有一个php背景。我用c ++和java搞砸了一下,但这个答案是从php的角度来看。
在php中,自定义对象是实际做事的对象(在java中有很多库,如果我理解正确的话,可能会有很多 >没有任何自定义对象)。也就是说,代表您的业务实体的对象,例如发票或销售项目,或代表您的应用程序,例如http响应对象或模板解析器对象。
传递和返回自定义对象可确保您的方法具有可预测的行为,即不在对象上调用非现有方法,确保如果在方法中键入提示接口,则实现该方法的任何对象sumable
接口将能够被侮辱(例如)。
传递和返回cutom对象的目的是确保应用程序的行为