小编pap*_*ane的帖子

虚函数默认参数行为

我对以下代码有一个奇怪的情况.请帮我澄清一下.

class B
{
       public:
            B();
            virtual void print(int data=10)
            {
                  cout << endl << "B--data=" << data;
            }
};
class D:public B
{
       public:
            D();
            void print(int data=20)
            {
                  cout << endl << "D--data=" << data;
            }
};

int main()
{
     B *bp = new D();
     bp->print();
return 0;
}
Run Code Online (Sandbox Code Playgroud)

关于我预期的输出

[ D--data=20 ]
Run Code Online (Sandbox Code Playgroud)

但实际上它是

[ D--data=10 ]
Run Code Online (Sandbox Code Playgroud)

请帮忙.这对你来说似乎很明显,但我不了解内部机制.

c++

34
推荐指数
2
解决办法
4436
查看次数

隐藏存储在哪里?

我对以下情况感到困惑

const char c = 'C';
char * p = const_cast<char *>(&c);

*p = 'K';
cout << " c = " << c << endl;
cout << " *p = " << *p << endl;

printf("c's address      : %u\n", &c);
printf("P is pointing to : %u\n", p);
Run Code Online (Sandbox Code Playgroud)

在执行时输出如下

c = C
*p = K
c's address      : 3221180271
P is pointing to : 3221180271
Run Code Online (Sandbox Code Playgroud)

在这里,我可以观察到'&c'和'p'在内存中具有相同的地址.

那么'p'能够存储与'c'不同的值的隐藏机制是什么,而两者在内存中共享相同的地址空间?

c++

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

为什么在Singleton类中使用私有析构函数?

我已经看到构造函数,复制构造函数,析构函数和赋值运算符保存在典型的单一类中的私有范围内.例如

class CMySingleton
{
public:
  static CMySingleton& Instance()
  {
    static CMySingleton singleton;
    return singleton;
  }

private:
  CMySingleton() {}                                  // Private constructor
  ~CMySingleton() {}
  CMySingleton(const CMySingleton&);                 // Prevent copy-construction
  CMySingleton& operator=(const CMySingleton&);      // Prevent assignment
};
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是

为什么要将析构函数和赋值运算符保留在私有范围内呢?这是强制性的吗?

公共析构函数是否会破坏单例类的任何属性?因为我们的对象构造受到限制所以不会有不必要的破坏.

我可以理解私有赋值运算符可以阻止自我赋值,但是除了额外的运行时间之外,公共赋值运算符是否还会受到伤害?

c++ singleton

4
推荐指数
1
解决办法
994
查看次数

这是如何发生静态的?

需要帮助以了解以下行为.

static int a;
int b[a];

for(int i=0; i<10; i++)
    b[i] = i+1;

for(int i=0; i<10; i++)
    cout << " " << b[i];
Run Code Online (Sandbox Code Playgroud)

输出为$> 1 2 3 4 5 6 7 8 8 10

但是,如果我将变量'a'声明为auto [like int a],那么它会在运行时崩溃,这很明显.但为什么它与静态一起工作.此外,如果我运行循环更多的时间(高于10)它崩溃.我做了12并且它崩溃了.此外,输出8在8和10之间而不是9,这是异常的.请帮忙.....

c++

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

纯虚函数的奇怪行为

#include <iostream>
using namespace std;

class B
{
    B();

public:
    virtual void print()=0;
};

void B::print()
{
    cout << "B::print"; 
}

int main()
{ 
   B *bp;
   bp->B::print();  /* Type-A   works fine */
   bp->print();     /* Type-B   segmentation fault */

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我试图通过'bp'调用纯虚函数.现在在main函数中有两种类型的调用(Type-A,Type-B).我的问题是为什么A有效,但B没有.此外,为什么编译器允许在不创建对象的情况下调用非静态函数.

c++ pure-virtual

0
推荐指数
1
解决办法
94
查看次数

非法删除堆栈对象

int main()
{
    myClass obj;

    ....    /* doing things */
    ....

    delete &obj; /* illegal */
}
Run Code Online (Sandbox Code Playgroud)

让我们假设myClass是一个适当的C++类,其中包含所有内容.现在,我知道这是非法的,这个程序会在运行时崩溃.第一件事就是代码试图删除一个堆栈对象,然后在范围完成之后它再次被破坏.我想知道这种非法行动的内部情况.即删除会发生什么,它会调用析构函数吗?对你来说可能看起来很疯狂,但请帮助我理解.

c++

0
推荐指数
1
解决办法
139
查看次数

意外的输出而不是运行时错误

对于谁知道背景魔法可能是显而易见的,但我无法理解下面的代码如何提供正确的输出.我预计运行时错误.请帮忙.

class a
{
  public:
    void print()
    {
        cout<<"Hello\n"<<endl;
        int d = 100;
        cout<<d<<endl;
    }

    int val;
};


int main()
{
   a* ptr;

   ptr->print();

   return SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

输出如下:

Hello

100
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
92
查看次数

perl中的18位朱利安时间戳

我需要在perl脚本中获得18位Julian Timestamp.有人可以帮助我吗?但是我已经编写了一个子程序来实现这一点,但它对我来说并不好看,因为它总是给我一个以6个零结尾的数字.请帮助获得一个正确的18位J时间戳.

sub GetJulianTimestamp()
{
  my $t = `perl -e 'print time, "\n"'`;
  return (($t * 1000000 ) + 210866803200000000);
}
Run Code Online (Sandbox Code Playgroud)

perl timestamp julian-date

0
推荐指数
1
解决办法
219
查看次数

标签 统计

c++ ×7

julian-date ×1

perl ×1

pure-virtual ×1

singleton ×1

timestamp ×1