什么是c ++单形类,这是一个例子吗?

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)

Ric*_*III 7

首先,为了回答这个问题,我们需要研究一下monomorphic真正的意义.要做到这一点,让我们打破这个词:

mono - morphic

所以,如果我们假设mono = 1并且morphic = transformable(至少对于这个例子 - 不要因为字典语义而杀了我)

所以,我们可以认为这意味着许多事情,这里有一些我的头脑:

  1. 我们班只能换一次
  2. 或者它可以用作多态的反义词(意味着它不能被子类化)
  3. 最后,它可以参考数学的属性:http://en.wikipedia.org/wiki/Monomorphism

所以,假设答案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++是一种复杂的语言,如果你真的希望一个类不能成为多态的,你需要让所有的成员和函数都是私有的,这就违背了首先拥有一个对象的目的.