首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++继承问题

C++继承问题
EN

Stack Overflow用户
提问于 2011-09-10 12:26:14
回答 3查看 524关注 0票数 0

你什么时候会使用:

私有constructor/destructor?

  • A保护constructor/destructor?

  • A保护继承的主类?

类名:受保护的主

  • 私有继承的主类?

类名:私有Main

如果它太宽泛了,你可以用一个简单的例子来说明你可能在哪里使用它,因为我只是在寻找一个开始的想法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-10 12:30:05

一个私有构造函数/析构函数

  • --一个受保护的构造函数/析构函数
    • --我不知道保护的析构函数,但是当它是一个内部类并且您只希望类和/或朋友类/函数和子类能够实例化自己时,它是一个受保护的构造函数。

http://www.parashift.com/c++-faq-lite/private-inheritance.html

  • A受保护继承的主类
  • 私有继承的主类
    • 阅读本文

票数 3
EN

Stack Overflow用户

发布于 2011-09-10 12:36:09

斯科特·迈尔斯这样解释:

  • class D : public B:"D提供接口"D是使用B".
  • (Protected实现的,继承没有那么有用。)

受保护的构造函数/析构函数对于您希望仅以第二种方式使用的类非常有用,这是为了为其他类提供实现。在这种情况下,只有派生类需要调用构造函数和析构函数,这样就可以保护构造函数和析构函数。

私有构造函数意味着只有类本身才能创建自己的实例,这在工厂或创建者模式中很流行,静态成员函数返回指向实例的指针,但不希望直接构造类实例。

票数 2
EN

Stack Overflow用户

发布于 2011-09-10 12:39:00

私有构造函数/析构函数?

私有构造函数/析构函数对于任何类型的类来说都是有意义的,这些类的对象实例应该由其他一些管理器类来管理(例如,它拥有它管理的类的所有实例的列表)。举个例子:

代码语言:javascript
复制
class AManager;

class A {
  private:
    friend class AManager;

    A() {};
    ~A() {};
}

class AManager {
  public:
    A* createA() { a = new A(); aList.add(a); return a; }
    void destroy(A* a) { aList.remove(a); delete a; }

  private:
    list<A> aList;
}

受保护的构造函数/析构函数?

如果您只希望创建类的子类(例如,如果您的类只是一个抽象类,但没有纯虚拟方法,那么理论上它可以通过公共构造函数实例化):

代码语言:javascript
复制
class A {
  protected:
    A() {};
    ~A() {};
}

class A1: public A {
  public:
    A1() {}
}

class A2: public A {
  public:
    A2() {}
}

作为工厂模式的一部分,这是最有意义的:

代码语言:javascript
复制
class AFactory {
  public:
    A* createA() {
      if(someCondition()) return new A1();
      else return new A2();
    }
    void destroyA(A* a) { delete a; }
  private:
    bool someCondition() { /*...*/ }
}

create/destroy方法也可以是A基类的静态方法,但是由于需要前向声明,它变得更加复杂。另外,作为一种选择,A1A2构造函数可以保持保护,AFactoryA1A2的朋友。

A受保护的继承的主类?私人继承的主要阶级?

你所说的Main类是什么意思?无论如何,非公共继承非常类似于聚合,因此如果没有非常具体的原因不这样做,聚合应该比私有/受保护的继承更好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7371661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档