小编Igo*_*Oks的帖子

我什么时候可以使用前瞻性声明?

我正在寻找允许在另一个类的头文件中进行类的前向声明的定义:

我是否允许为基类,作为成员持有的类,通过引用传递给成员函数的类等执行此操作?

c++ c++-faq forward-declaration

588
推荐指数
7
解决办法
23万
查看次数

模板<unsigned int N>是什么意思?

在声明模板时,我习惯使用这种代码:

template <class T>
Run Code Online (Sandbox Code Playgroud)

在这个问题中,他们使用了:

template <unsigned int N>
Run Code Online (Sandbox Code Playgroud)

我查看它编译.但是这是什么意思?它是非类型参数吗?如果是这样,我们怎么能有一个没有任何类型参数的模板?

c++ templates

110
推荐指数
4
解决办法
9万
查看次数

如何在C++中使用基类的构造函数和赋值运算符?

我有一个B包含一组构造函数和赋值运算符的类.

这里是:

class B
{
 public:
  B();
  B(const string& s);
  B(const B& b) { (*this) = b; }
  B& operator=(const B & b);

 private:
  virtual void foo();
  // and other private member variables and functions
};
Run Code Online (Sandbox Code Playgroud)

我想创建一个D只覆盖函数的继承类,foo()不需要进行其他更改.

但是,我希望D拥有相同的构造函数集,包括复制构造函数和赋值运算符B:

D(const D& d) { (*this) = d; }
D& operator=(const D& d);
Run Code Online (Sandbox Code Playgroud)

我是否必须重写所有这些D,或者有没有办法使用B的构造函数和运算符?我特别想避免重写赋值运算符,因为它必须访问所有B的私有成员变量.

c++ inheritance constructor assignment-operator

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

在派生类中具有相同名称但签名不同的函数

我有一个具有相同名称的函数,但在基类和派生类中具有不同的签名.当我尝试在继承自派生的另一个类中使用基类的函数时,我收到一个错误.请参阅以下代码:

class A
{
    public:
    void foo(string s){};
};

class B : public A
{
    public:
    int foo(int i){};
};

class C : public B
{
    public:
    void bar()
    {
        string s;
        foo(s);
    }
};
Run Code Online (Sandbox Code Playgroud)

我从gcc编译器收到以下错误:

In member function `void C::bar()': no matching function for call to `C::foo(std::string&)' candidates are: int B::foo(int)
Run Code Online (Sandbox Code Playgroud)

如果我int foo(int i){};从课堂上删除B,或者我将其重命名foo1,一切正常.

这有什么问题?

c++ lookup inheritance function c++-faq

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

如何初始化作为类成员的shared_ptr?

我不确定初始化shared_ptr一个类的成员的好方法.你能告诉我,我选择的方式是否C::foo()合适,还是有更好的解决方案?

class A
{
  public:
    A();
};

class B
{
  public:
    B(A* pa);
};

class C
{
    boost::shared_ptr<A> mA;
    boost::shared_ptr<B> mB;
    void foo();
};

void C::foo() 
{
    A* pa = new A;
    mA = boost::shared_ptr<A>(pa);
    B* pB = new B(pa);
    mB = boost::shared_ptr<B>(pb);
}
Run Code Online (Sandbox Code Playgroud)

c++ boost initialization member shared-ptr

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

何时使用Factory方法模式?

何时使用Factory方法模式?

请提供一些具体的想法何时在项目中使用它?以及它如何比新关键字更好的方式?

c# design-patterns factory

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

C++中异常的调用栈

今天,在我的C++多平台代码中,我对每个函数都进行了尝试.在每个catch块中,我将当前函数的名称添加到异常并再次抛出,以便在最上面的catch块(我最终打印异常的详细信息)中,我有完整的调用堆栈,这有助于我跟踪异常的原因.

这是一个好习惯,还是有更好的方法来获取异常的调用堆栈?

c++ callstack exception try-catch

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

继承还是构成:依靠"is-a"和"has-a"?

当我设计类并且必须在继承和组合之间进行选择时,我通常使用经验法则:如果关系是"is-a" - 使用继承,如果关系是"has-a" - 使用组合.

总是对的吗?

谢谢.

c++ oop inheritance

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

如何使用滚动条使WPF TextBox在添加行时自动滚动到底部?

例如,像Visual Studio的"输出"窗口一样.

有没有办法在XAML中做到这一点?

.net wpf scroll

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

从覆盖函数调用重写函数

假设我在B类中有虚函数foo(),我需要在B的派生类之一D类中略有不同的行为.可以创建重写函数D :: foo(),并调用B :: foo( )从那里,经过特殊情况处理?像这样:

void D::foo()
{
  if (/*something*/)
     // do something
  else
     B::foo();
}
Run Code Online (Sandbox Code Playgroud)

我不是在问这是否会奏效,我知道会这样.我想知道,对于一个好的OOD来说它是否正确.

c++ oop virtual inheritance overriding

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