小编Jer*_*emy的帖子

私人继承在C ++中引起问题

为什么以下代码会遇到错误“ A”,而无法访问“ B”呢?这是我的想法:

  • 每当我们调用函数foo()时,它将执行new B(5),它将首先调用其基本结构A的构造函数。

  • struct A的构造函数是一个公共方法,因此它的派生struct B应该可以访问它(如果我没有记错的话,应加以保护)。

  • 然后将调用结构B的构造函数以创建具有五个0的向量。

  • 然后删除对象a将调用析构函数B,然后调用析构函数A。

我的逻辑有什么问题吗?您的回答将不胜感激

#include <iostream>
#include <vector>

using namespace std;

struct A 
{ 
    A() { cout << "Constructor A called"<< endl;} 
    virtual ~A() { cout << "Denstructor A called"<< endl;}
};

struct B : private A
{
    vector<double> v;
    B(int n) : v(n) { cout << "Constructor B called"<< endl;}
    ~ B() { cout << "Denstructor B called"<< endl;}
};

int main()
{
    const A *a = new …
Run Code Online (Sandbox Code Playgroud)

c++

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

在不知道是行向量还是列向量的情况下将元素添加到向量的前面?

如果我向行向量 x 添加一个 newvlaue,它将是

x = [newvlue, x] % use of ,
Run Code Online (Sandbox Code Playgroud)

但如果到列向量 x,它将是

x = [newvlue; x] % use of ;
Run Code Online (Sandbox Code Playgroud)

所以我必须提前知道它是行向量还是列向量才能执行此前端插入。但我可能并不总是知道 x 是用户输入。所以每次我需要事先执行这个行向量或列向量检查。但是,假设我真的不想关心它是行向量还是列向量,我只需要在数组的前面添加一个元素。有没有什么优雅的方式来编写代码?

arrays matlab

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

在这种情况下,Python 是按引用传递还是按值传递,为什么?

以下代码是我的简单示例,对于每一步,我都会在评论中解释我在做什么,问题在最后。

import pandas as pd
todays_date = datetime.datetime.now().date()
index = pd.date_range(todays_date, periods=3, freq='D')
columns = ['A','B','C']
df1 = pd.DataFrame(index=index, columns=columns)
df1 = df1.fillna(1) 

# up to here, i've just create a random df1, which looks like the follow:  
#               A   B   C
# 2020-03-24    1   1   1
# 2020-03-25    1   1   1
# 2020-03-26    1   1   1

df2 = df1     # here created a copy of df1 named as df2, it should pass by value based on my knowledge 
df1 …
Run Code Online (Sandbox Code Playgroud)

python

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

C++中如何防止派生类成为抽象类?

我有一个关于多态性的问题。以下示例将导致错误“无法将变量 \xe2\x80\x98obj\xe2\x80\x99 声明为抽象类型 \xe2\x80\x98B\xe2\x80\x99”

\n\n

我知道问题在于函数 A::foo() 的纯虚方法,这使得 A 成为一个抽象类。此外,类 B 是类 A 固有的。如果我没有在 B 的主体中实现方法 foo(),是否也必然使 B 成为抽象?并因此导致错误?但这的逻辑是什么?我的基类 A 可能还有很多其他派生类,函数 foo 可能适用于某些派生类,但对于 B 类可能完全没用。当然我可以声明一个空函数 B::foo() ,这绝对是不执行任何操作并使代码运行。但是,对于这种行为有更好的解决方案或解释吗?谢谢!

\n\n
struct A\n{\n    A() : x(0)  {}\n    virtual int foo() const = 0;   // if I remove this line, code will run with no problem.\n    int x;\n};\n\nstruct B :  A {};\n\nint main()\n{\n    B obj;\n    cout << obj.x << endl;\n\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

c++ polymorphism inheritance abstract-class

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

为什么以及如何在C ++中使用bind()作为谓词?

我给了这个看起来很奇怪的std::generate()函数,它std::vector在a和b之间创建一个随机数。

int myrand(int a, int b)
{
    int div = b-a;
    return a + (rand() % (b-a));
}

int main()
{
    vector<int> v(20);
    generate( v.begin(), v.end(), bind(myrand,1, 11) );  //fill with random no. bwt 1 and 10 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我知道std::generate()函数是如何工作的,必须将谓词传递给第三个参数。谓词可以采用以下形式:

  • 功能
  • 功能对象
  • 函数指针。

但是我对表达式很困惑bind(myrand,1, 11),为什么我们必须这样写呢?

我知道bind返回的函数可以放在这里作为第三个参数。

但是,myrand功能也不是吗?我尝试将第三个参数替换为myrand(1,11),但它不起作用,为什么会这样呢?

c++ c++11

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

如何在excel中将数字转换为日期时间格式(我在R中实现了等效的解决方案)

在此处输入图片说明

参考上面的屏幕截图,我正在尝试从新加坡证券交易所抓取数据,该数据是从返回 json 的 API 调用动态加载的 Web 内容,示例在这里

我对日期有一些问题,这是由 json 给出的数字。例如,1575491760000应该是2019-12-04 20:36:00GMT

经过一些反复试验,我想出了使用 R 的解决方案:

as.POSIXct(1575491760000/1000, origin="1970-01-01", tz = 'GMT')  
# not sure why need to divide the number by 1000 here but i guess this is the way to make it work
Run Code Online (Sandbox Code Playgroud)

上面的代码确实"2019-12-04 20:36:00 GMT"在 R中返回。

但是,我的问题是在 Excel 中是否有上述转换的解决方案?我尝试了几种不同的方法,但没有一种方法可以处理这么长的数据场景(日期 + 时间格式)。如果有人可以提供具体的解决方案,不胜感激!

excel r date-format excel-formula excel-dates

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

delete []有问题,如何部分删除内存?

当我们在c ++中学习动态分配时,关于delete []的最简单示例是:

int main()
{
    size_t n = 5;
    int *p = new int[n];
    delete[] p;
}
Run Code Online (Sandbox Code Playgroud)

简而言之,delete[]它能够从堆内存中删除先前由分配的类似C的数组new。但是,我收到以下代码的错误。

int main()
{
    size_t n = 5;
    int *p = new int[n];
    p++;         //move the pointer to the second element of the array
    delete[] p;
}
Run Code Online (Sandbox Code Playgroud)

我在想这是否可以删除相同的堆内存,但是从第二个元素开始。但是,我遇到一些我不明白的错误:

Test Prep(51600,0x1000d1dc0) malloc: *** error for object 0x100537134: pointer being freed was not allocated
Run Code Online (Sandbox Code Playgroud)

c++

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

为什么在这种情况下括号无法更改c ++运算符优先级?

这是我的简单代码:

int main()
{
    int x = 5;
    cout << (x++) << endl;

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

上面的代码打印出的5不是6,即使带括号,我的想法是在打印出来之前先执行x = x + 1吗?谁能告诉我这是怎么回事?谢谢

编辑:我肯定理解++ x家伙,我的问题是关于使用()的更改运算符优先级

c++

-5
推荐指数
2
解决办法
98
查看次数