小编Kun*_*nal的帖子

虚拟继承中构造函数调用的顺序

class A {
        int i;
public: 
        A() {cout<<"in A's def const\n";};
        A(int k) {cout<<"In A const\n";  i = k; }
        };

class B : virtual public A {
public:
        B(){cout<<"in B's def const\n";};
        B(int i) : A(i) {cout<<"in B const\n";}
        };

class C :   public B {
public:
        C() {cout<<"in C def cstr\n";}
        C(int i) : B(i) {cout<<"in C const\n";}
        };

int main()
{
        C c(2);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

这种情况下的输出是

in A's def const
in B const
in C const …
Run Code Online (Sandbox Code Playgroud)

c++ constructor virtual-inheritance

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

用于登录网站的Shell脚本

我想使用shell脚本登录网站,同时我也想自动获取用户ID和密码.

请建议如何使用shell脚本完成.

谢谢 !!!

unix shell scripting

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

在C++中删除

struct item   
{ 
  unsigned int a, b, c;
};

item* items[10];    
delete items[5];    
items[5] = NULL;
Run Code Online (Sandbox Code Playgroud)

上面的代码有效

但是下面的方法不起作用

int * arr1[30];

delete (arr1+5);
Run Code Online (Sandbox Code Playgroud)

我是初学者,请告诉我为什么我能够在结构指针的情况下删除但不能在int指针的情况下删除

c++

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

动态转换不适用于非多态基类?

这里第二次演员表示错误

cast.cc:35:35: error: cannot dynamic_cast ‘base’ (of type ‘class CBase*’) to type ‘class CDerived*’ (source type is not polymorphic)

    CBase * base = new CDerived; 
    CBase* pb;
    CDerived * der = new CDerived; 
    CDerived* pd;
    pb = dynamic_cast<CBase*>(der);     // ok: derived-to-base
    pd = dynamic_cast<CDerived*>(base);  // wrong: base-to-derived
Run Code Online (Sandbox Code Playgroud)

这意味着什么?

如果我使基类具有多态性,为什么会这样?

有人可以让我知道这背后的基本概念.

c++ casting

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

使用pthreads的线程池实现

我正在尝试使用 pthreads 来理解线程池的以下实现。当我注释掉 main 中的 for 循环时,程序卡住了,在放置日志时,它似乎卡在线程池析构函数中的连接函数中。

我无法理解为什么会发生这种情况,是否有任何死锁情况发生?

这可能很幼稚,但有人可以帮助我理解为什么会发生这种情况以及如何纠正这种情况。

非常感谢 !!!

#include <stdio.h>
#include <queue>
#include <unistd.h>
#include <pthread.h>
#include <malloc.h>
#include <stdlib.h>

// Base class for Tasks
// run() should be overloaded and expensive calculations done there
// showTask() is for debugging and can be deleted if not used
class Task {
public:
    Task() {}
    virtual ~Task() {}
    virtual void run()=0;
    virtual void showTask()=0;
};

// Wrapper around std::queue with some mutex protection
class WorkQueue {
public:
WorkQueue() { …
Run Code Online (Sandbox Code Playgroud)

c c++ multithreading

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

将char*传递给函数并获取返回值....这是正确的方法吗?

char * func(char * str)
{
    char *ptr = (char *)malloc(strlen(str));
    sprintf(ptr,"%s",str);
    * (ptr +1) = 'E'; 
    printf("%s\n",ptr);
    return ptr;
}

void main()
{
    char * str = "kundan";
    char * str1 = func(str);
    printf("%s\n",str1);
    free(str1);
    printf("%s\n",str1);
}
Run Code Online (Sandbox Code Playgroud)

这是一个非常基本的问题,但我很困惑.我正在向函数发送char*并接收返回值,该值也是char*.我不能在func()中使用堆栈内存作为返回,因为它将在func调用结束后到期.所以,我在堆中分配内存并返回它.请建议是否有更好的方法和我正在释放的记忆是正确的工作方式.

c

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

getchar的输出

    int ch;
    do
    {
            ch = getchar();
            printf("ch = %d\n",ch);
    }while(ch != '\n' && ch != EOF);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,输入1234的输出是

    ch = 49
    ch = 50
    ch = 51
    ch = 52
    ch = 10
Run Code Online (Sandbox Code Playgroud)

但就像这样给它

    char chs[100] = {0};
    unsigned int u = 0;
    int sign = 1,k=0;
    if(scanf("%[- 0-9]",&chs[0])== 1)
    {
             int ch;
             do
             {
              ch = getchar();
              printf("ch =  %d\n",ch);
             }while(ch != '\n' && ch != EOF);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,输入= 1234的输出是

    ch =10
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?有人可以解释一下......为什么输出不像以前那样?

scanf如何在这里工作?

c

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

混淆了调用派生类虚函数的方式

在下面的代码中,我无法理解调用派生类的虚方法的方式.此外,任何人都可以建议一个源,其中虚拟功能的概念用非常基本的方法图解说明.

class Base1
{
  virtual void fun1() { cout << "Base1::fun1()" << endl; }
  virtual void func1() { cout << "Base1::func1()" << endl; }
};


class Base2 
{
  virtual void fun1() { cout << "Base2::fun1()" << endl; }
  virtual void func1() { cout << "Base2::func1()" << endl; }
};


class Base3 
{
    virtual void fun1() { cout << "Base3::fun1()" << endl; }
    virtual void func1() { cout << "Base3::func1()" << endl; }
};

class Derive : public Base1, public Base2, …
Run Code Online (Sandbox Code Playgroud)

c++ virtual

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