Edw*_*d83 -5 c++ oop class monomorphism
请告诉我,如果以下课程是单形的?
是什么让它变成单形的?单形实际上意味着什么?
class Foo
{
public:
Foo(int n)
{
this->m = n;
}
void print()
{
std::cout << this->m << std::endl;
}
private:
int m;
};
Run Code Online (Sandbox Code Playgroud)
编辑:
在Boo类的上下文中:
class Boo
{
public:
Boo& Boo::operator=(const Boo &boo)
{
*foo1 = *boo.foo1;
*foo2 = *boo.foo2;
return *this;
}
private:
Foo* foo1;
Foo* foo2;
};
Run Code Online (Sandbox Code Playgroud)
首先,为了回答这个问题,我们需要研究一下monomorphic真正的意义.要做到这一点,让我们打破这个词:
mono - morphic
所以,如果我们假设mono = 1并且morphic = transformable(至少对于这个例子 - 不要因为字典语义而杀了我)
所以,我们可以认为这意味着许多事情,这里有一些我的头脑:
所以,假设答案3不是我们想要的(在这种情况下你必须找到一个更好的答案,因为那篇文章令人困惑),让我们一步一步.
我们班只能换一次
在我看来,这是最可能的含义.乍一看,您的对象是单态的,这意味着它只能通过构造函数(指定的构造函数或内置的复制构造函数)更改一次.
在具有读写内存的任何计算机中,这都不可能,因为如果您需要/需要,几乎总有一种方法可以手动设置内存中的位.
但是,除了这种情况,使用你提供的接口,然后是的,你的类是单态的,因为它的member(m)只是通过构造函数设置的.
我们班的不是多态的
这个问题的答案有点复杂.与大多数语言不同,C++有两种形式的多态性.在传统的OO意义上,它具有创建被子类覆盖的函数的能力,这些函数将被标记为virtual.但是,您不这样做,因此您的类不可能使用OO多态性.
但是,正如我之前所说,C++中有多种类型的多态性.第二种类型被称为template polymorphismor function polymorphism,它在整个STL中使用(主要用于迭代器),它的工作原理如下:
template<typename aImpl>
void printA(const aImpl &a)
{
a.print();
}
class A {
public:
void print() { puts("I'm in A!"); }
};
Run Code Online (Sandbox Code Playgroud)
这是一个非常有效的界面,它可以按预期工作.但是,没有什么可以阻止将以下类放到函数中:
class B {
public:
void print() { puts("I'm in B!"); }
};
Run Code Online (Sandbox Code Playgroud)
哪个显然会打印出不同的值.
最后,C++是一种复杂的语言,如果你真的希望一个类不能成为多态的,你需要让所有的成员和函数都是私有的,这就违背了首先拥有一个对象的目的.