小编Moa*_*nti的帖子

在main内部私有属性访问背后的想法是什么?Java x C++

使用C++时,不允许访问main函数内的私有属性.例:

#include <iostream>
using namespace std;
class Test {
    private: int a;
    public:
       Test(int value) { a = value; }
       int getValue() { return a; }
};
int main (int argc, char *argv[]) { 
    Test test2(4);
    cout << test2.a; // Compile error! Test::a is private within this context
    cout << test2.getValue(); // OK!
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

很清楚为什么在类方法之外访问私有属性时会出错,因为C++在类中没有主要函数.

但是,在Java中允许:

public class Test {
    private int a;
    public Test(int value) { a = value; }
    public int getValue() { return a; } …
Run Code Online (Sandbox Code Playgroud)

c++ java encapsulation program-entry-point

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

哪些功能是动态调度的?

我搜索过问题,查看论坛,书籍等等.我可以识别方法的多态行为,并且在编译或运行时决定调用的方法时有很多简单的例子.但我对此代码感到困惑,其中C类继承自B的继承自A的代码:

class A {
protected:
    int x;

public: 
    virtual void change() = 0;
    virtual void change(int a) { x = a; }
};

class B : public A {
public: 
    void change() { x = 1; }
};

class C : public B {
public: 
    void change() { x = 2; }
    void change(int a) { x = a*2; }
};

int main () { 
    B *objb = new B();
    C *objc = new C();
    A *obja;
    objb->change();
    obja = …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism inheritance

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

Valgrind不报告"删除阵列"上的内存泄漏

在实现下面的C++代码后,我运行valgrind --leak-check=full以检查是否有任何内存泄漏.结果是在退出时使用了0个字节,并且 没有泄漏是可能的.

然而,后来我发现我忘了使用delete[] x而不是仅仅delete x在析构函数中使用.

我搜索了一些解释(例如:C++中的delete vs delete []运算符),我读到的所有内容都说使用deletewithout []会导致内存泄漏,因为它只调用数组中第一个对象的析构函数.

我将代码更改为删除[],并且valgrind输出相同(如预期的那样).但是现在我很困惑:"valgrind是否有问题,或者delete即使没有运算符,阵列也能正常工作[]吗?"

#include <iostream>
#include <string.h>
using namespace std;
class Foo {
  private: char *x;
  public:
    Foo(const char* px) {
       this->x = new char[strlen(px)+1];
       strcpy(this->x, px);
    }
    ~Foo() {
       delete x;
    }
    void printInfo() {  cout << "x: " << x << endl;  }
};
int main() {
   Foo *objfoo = …
Run Code Online (Sandbox Code Playgroud)

c++ valgrind memory-leaks delete-operator

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