标签: overloading

`is_base_of`是如何工作的?

以下代码如何工作?

typedef char (&yes)[1];
typedef char (&no)[2];

template <typename B, typename D>
struct Host
{
  operator B*() const;
  operator D*();
};

template <typename B, typename D>
struct is_base_of
{
  template <typename T> 
  static yes check(D*, T);
  static no check(B*, int);

  static const bool value = sizeof(check(Host<B,D>(), int())) == sizeof(yes);
};

//Test sample
class Base {};
class Derived : private Base {};

//Expression is true.
int test[is_base_of<Base,Derived>::value && !is_base_of<Derived,Base>::value];
Run Code Online (Sandbox Code Playgroud)
  1. 请注意,这B是私人基地.这是如何运作的?

  2. 注意operator B*()是const.它为什么如此重要?

  3. 为什么template<typename T> static yes …

c++ templates overloading type-traits implicit-conversion

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

方法重载与C#4.0中的可选参数

哪一个更好?一目了然可选参数似乎更好(代码更少,XML文档更少等),但为什么大多数MSDN库类使用重载而不是可选参数?

当您选择使用可选参数(或重载)时,是否有任何特殊事项需要注意?

.net c# overloading optional-parameters c#-4.0

114
推荐指数
6
解决办法
7万
查看次数

为什么在非const的私有时不调用公共const方法?

考虑以下代码:

struct A
{
    void foo() const
    {
        std::cout << "const" << std::endl;
    }

    private:

        void foo()
        {
            std::cout << "non - const" << std::endl;
        }
};

int main()
{
    A a;
    a.foo();
}
Run Code Online (Sandbox Code Playgroud)

编译器错误是:

错误:'void A :: foo()'是私有的.

但是当我删除私有它时它才起作用.为什么在非const的私有时不调用public const方法?

换句话说,为什么在访问控制之前会出现重载决策?这很奇怪.你认为它是一致的吗?我的代码工作,然后我添加一个方法,我的工作代码根本不编译.

c++ overloading member-functions overload-resolution

114
推荐指数
11
解决办法
7027
查看次数

使用C++构造函数的默认参数

拥有使用默认参数的类构造函数是一种好习惯,还是应该使用单独的重载构造函数?例如:

// Use this...
class foo  
{
private:
    std::string name_;
    unsigned int age_;
public:
    foo(const std::string& name = "", const unsigned int age = 0) :
        name_(name),
        age_(age)
    {
        ...
    }
};

// Or this?
class foo  
{
private:
    std::string name_;
    unsigned int age_;
public:
    foo() :
    name_(""),
    age_(0)
{
}

foo(const std::string& name, const unsigned int age) :
        name_(name),
        age_(age)
    {
        ...
    }
};
Run Code Online (Sandbox Code Playgroud)

这两个版本似乎都有用,例如:

foo f1;
foo f2("Name", 30);
Run Code Online (Sandbox Code Playgroud)

您更喜欢或推荐哪种风格?为什么?

c++ constructor coding-style overloading

111
推荐指数
6
解决办法
21万
查看次数

Java中的动态和静态多态有什么区别?

任何人都可以提供一个简单的例子来解释Java中动态静态多态的区别吗?

java oop polymorphism overriding overloading

108
推荐指数
9
解决办法
20万
查看次数

Java中的构造函数重载 - 最佳实践

有一些类似的主题,但我找不到一个有足够答案的主题.

我想知道在Java中构造函数重载的最佳实践是什么.我已经对这个问题有了自己的想法,但我想听听更多建议.

我指的是简单类中的构造函数重载和构造函数重载,同时继承已经重载的类(意味着基类具有重载的构造函数).

谢谢 :)

java constructor overloading constructor-overloading

105
推荐指数
3
解决办法
17万
查看次数

Scala的Case Classes的重载构造函数?

在Scala 2.8中是否有一种方法来重载案例类的构造函数?

如果是的话,请把一个片段解释一下,如果没有,请解释原因?

constructor scala overloading case-class scala-2.8

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

当参数是文字空值时,如何选择重载方法?

我在测验中遇到了这个问题,

public class MoneyCalc {

   public void method(Object o) {
      System.out.println("Object Verion");
   }

   public void method(String s) {
      System.out.println("String Version");
   }

   public static void main(String args[]) {
      MoneyCalc question = new MoneyCalc();
      question.method(null);
   }
}
Run Code Online (Sandbox Code Playgroud)

该程序的输出是"String Version".但是我无法理解为什么将null传递给重载方法会选择字符串版本.null是一个String变量,指向什么?

但是当代码更改为时,

public class MoneyCalc {

   public void method(StringBuffer sb) {
      System.out.println("StringBuffer Verion");
   }

   public void method(String s) {
      System.out.println("String Version");
   }

   public static void main(String args[]) {
      MoneyCalc question = new MoneyCalc();
      question.method(null);
   }
}
Run Code Online (Sandbox Code Playgroud)

它给出了一个编译错误,说"方法方法(StringBuffer)对于MoneyCalc类型是不明确的"

java overloading

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

为什么我不能在PHP中重载构造函数?

我已经放弃了所有希望能够在PHP中重载我的构造函数,所以我真正想知道的是为什么.

有没有理由呢?它是否会产生固有的错误代码?它是否被广泛接受的语言设计不允许它,或者其他语言比PHP更好?

php oop constructor overloading

96
推荐指数
5
解决办法
6万
查看次数

在Java中使用不同的返回类型进行重载?

为什么仅通过更改返回类型来重载函数是不可能的?这将在未来的Java版本中发生变化吗?

那么,仅供参考,这在C++中是否可行?

java overloading

92
推荐指数
4
解决办法
8万
查看次数