小编sky*_*oor的帖子

工厂,抽象工厂和工厂方法

我对这三个术语感到很困惑.

我的理解是:

  • 在工厂模式中,没有混凝土工厂.工厂根据参数构建新对象.

  • 在抽象工厂模式中,有多个混凝土工厂.客户必须明确地创建不同的具体工厂.

是对的吗?

还有什么区别?

此外,什么是工厂方法模式?它与工厂模式相同吗?

design-patterns factory factory-pattern abstract-factory

42
推荐指数
1
解决办法
1万
查看次数

C++中的变量初始化

我的理解是int变量将0自动初始化; 但事实并非如此.下面的代码打印一个随机值.

int main () 
{   
    int a[10];
    int i;
    cout << i << endl;
    for(int i = 0; i < 10; i++)
        cout << a[i] << " ";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)
  • 什么规则(如果有的话)适用于初始化?
  • 具体来说,在什么条件下变量自动初始化?

c++ variables initialization

42
推荐指数
3
解决办法
6万
查看次数

在C++中,pass-by-pointer更适合传递引用?

我可以想象一种情况,其中输入参数可以是NULL,因此传递指针是首选但不是传递参考?

任何人都可以添加更多案例吗?

c++

34
推荐指数
3
解决办法
3529
查看次数

C++中的组合和排列

什么是C++中使用最广泛的现有库来提供n个元素中k个元素的所有组合和排列?

我不是问算法而是现有的库或方法.

谢谢.

c++

32
推荐指数
3
解决办法
2万
查看次数

pimpl成语与桥梁设计模式

我刚刚注意到一个新术语pimpl成语,这个成语与Bridge设计模式有什么区别?我很困惑.

我也注意到pimpl成语总是用于交换功能,那是什么?有人可以举个例子吗?

c++ design-patterns

29
推荐指数
1
解决办法
1万
查看次数

为什么受保护的构造函数会引发此代码的错误?

关于受保护构造函数的一个问题 我了解到受保护的构造函数可以在派生类中使用.但是,我发现下面的代码有错误.为什么会这样?

class A
{
    protected:
        A(){}
};

class B: public A {
    public:
        B() {
            A* f=new A();           // Why it is not working here
        }
};
Run Code Online (Sandbox Code Playgroud)

c++ constructor protected

29
推荐指数
2
解决办法
1万
查看次数

搜索堆中的元素

我记得堆可以用来搜索元素是否在其中,具有O(logN)时间复杂度.但突然间我无法得到细节.我只能找到getmin delete add等等.

任何人都可以暗示一下吗?

algorithm heap big-o data-structures

28
推荐指数
2
解决办法
5万
查看次数

什么是C++中的多态类型?

我在一篇文章中发现"static_cast用于非多态类型转换,而dynamic_cast用于多态类型转换".我知道int和double不是多态类型.

但是,我还发现static_cast可以在基类和派生类之间使用.这里的多态类型是什么意思?有人说多态类型意味着具有虚函数的基类.是对的吗?这是唯一的情况吗?还有什么?任何人都可以为我详细说明这个吗?

c++

26
推荐指数
3
解决办法
2万
查看次数

使用虚方法的C++对象大小

我对虚拟对象大小有一些疑问.

1)虚函数

class A {
    public:
       int a;
       virtual void v();
    }
Run Code Online (Sandbox Code Playgroud)

A类的大小是8字节....一个整数(4个字节)加上一个虚拟指针(4个字节)很清楚!

class B: public A{
    public:
       int b;
       virtual void w();
}
Run Code Online (Sandbox Code Playgroud)

B级的大小是多少?我使用sizeof B测试,它打印12

这是否意味着只有一个vptr,即使B类和A类都有虚函数?为什么只有一个vptr?

class A {
public:
    int a;
    virtual void v();
};

class B {
public:
    int b;
    virtual void w();
};

class C :  public A, public B {
public:
    int c;
    virtual void x();
};
Run Code Online (Sandbox Code Playgroud)

C的大小是20 ........

似乎在这种情况下,两个vptrs在布局中......这是怎么发生的?我认为两个vptrs一个用于A类,另一个用于B类....所以没有vptr用于C类的虚函数?

我的问题是,关于继承中vptrs数量的规则是什么?

2)虚拟继承

    class A {
    public:
        int a;
        virtual void v();
    };

    class B: virtual …
Run Code Online (Sandbox Code Playgroud)

c++ virtual-functions objectsize

26
推荐指数
1
解决办法
6881
查看次数

如何在C++中从一个stringstream对象复制到另一个?

我有std::stringstream对象ss1.现在,我想从这个创建另一个副本.

我试试这个:

std::stringstream ss2 = ss1;
Run Code Online (Sandbox Code Playgroud)

要么:

std::stringstream ss2(ss1)
Run Code Online (Sandbox Code Playgroud)

既不起作用

错误消息是这样的:

无法从bsl :: basic_stringstream,bsl :: allocator> :: basic_stringstream(const bsl :: basic_stringstream,bsl :: allocator>&)访问std :: ios :: basic_ios(const std :: ios&).

c++ stringstream

25
推荐指数
2
解决办法
2万
查看次数