标签: member-variables

类和实例属性有什么区别?

是否有任何有意义的区别:

class A(object):
    foo = 5   # some default value
Run Code Online (Sandbox Code Playgroud)

class B(object):
    def __init__(self, foo=5):
        self.foo = foo
Run Code Online (Sandbox Code Playgroud)

如果您要创建大量实例,那么这两种样式的性能或空间要求是否存在差异?当您阅读代码时,您是否认为两种样式的含义有显着差异?

python attributes member-variables

127
推荐指数
4
解决办法
6万
查看次数

Python中的私有成员

如何在Python中将方法和数据成员设为私有?或者Python不支持私有成员?

python oop class member-variables

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

返回成员变量的引用是不好的做法?

以下据说比公共成员有第一个/第二个更好.我相信这几乎一样糟糕.如果您正在提供一种方法来访问课外的私有变量,那么重点是什么?功能不应该是

T First(); void(or T) First(const T&)
Run Code Online (Sandbox Code Playgroud)

样品:

// Example 17-3(b): Proper encapsulation, initially with inline accessors. Later
// in life, these might grow into nontrivial functions if needed; if not, then not.
//
template<class T, class U>
class Couple {
  Couple()           : deleted_(false) { }
  T& First()         { return first_; }
  U& Second()        { return second_; }
  void MarkDeleted() { deleted_ = true; }
  bool IsDeleted()   { return deleted_; }

private:
 T first_;
 U second_;
 bool deleted_;
};
Run Code Online (Sandbox Code Playgroud)

c++ reference member-variables

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

Python类成员

我只是在学习Python,而且我来自C背景,所以如果我在两者之间有任何困惑/混淆,请告诉我.

假设我有以下课程:

class Node(object):
    def __init__(self, element):
        self.element = element
        self.left = self.right = None

    @classmethod
    def tree(cls, element, left, right):
        node = cls(element)
        node.left = left
        node.right = right
        return node
Run Code Online (Sandbox Code Playgroud)

这是一个名为的类Node,它重载构造函数,以便能够在需要时处理不同的参数.

是什么定义之间的差异self.element__init__只(如上所示),而不是执行以下操作:

class Node(object):
    element, left, right = None
    def __init__(self, element):
        self.element = element
        self.left = self.right = None
Run Code Online (Sandbox Code Playgroud)

是不是self.element__init__相同类的element变量定义?这难道不只是简单地覆盖elementNoneelement传入值__init__

python class member-variables

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

可以使用成员变量初始化初始化列表中的其他成员吗?

考虑以下(简化)情况:

class Foo
{
private:
    int evenA;
    int evenB;
    int evenSum;
public:
    Foo(int a, int b) : evenA(a-(a%2)), evenB(b-(b%2)), evenSum(evenA+evenB)
    {
    }
};
Run Code Online (Sandbox Code Playgroud)

当我像这样实现Foo时:

Foo foo(1,3);
Run Code Online (Sandbox Code Playgroud)

然后evenA是0,evenB是2,但是甚至将初始化为2?

我在我当前的平台(iOS)上尝试了这个,它似乎工作,但我不确定这段代码是否可移植.

谢谢你的帮助!

c++ initialization-list member-variables

30
推荐指数
3
解决办法
3779
查看次数

C++静态成员变量初始化是否是线程安全的?

根据以下资源,在C++(特别是Visual C++)中,作用域静态变量初始化不是线程安全的.但是,全局静态变量是安全的.

线程安全的静态变量没有静音?

http://blogs.msdn.com/oldnewthing/archive/2004/03/08/85901.aspx

那么,遵循静态成员变量的代码是否是线程安全的?

class TestClass
{
public:
   static MyClass m_instance;
}

Myclass TestClass::m_instance;
Run Code Online (Sandbox Code Playgroud)

提前致谢!

c++ static multithreading member-variables

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

是否可以放弃简单类的getter和setter?

我正在制作一个非常简单的类来表示3D空间中的位置.

目前,我只是让用户访问和修改个人X,YZ值直接.换句话说,它们是公共成员变量.

template <typename NumericType = double>
struct Position
{
    NumericType X, Y, Z;

    // Constructors, operators and stuff...
};
Run Code Online (Sandbox Code Playgroud)

这背后的原因是,因为NumericType是一个模板参数,我不能依赖于有一个体面的方法来检查值的理智.(我怎么知道用户不希望用负值表示位置?)因此,添加getter或setter以使接口复杂化是没有意义的,因为简洁直接访问应该受到青睐.

Pos.X = Pos.Y + Pos.Z; // Versus...
Pos.SetX(Pos.GetY() + Pos.GetZ());
Run Code Online (Sandbox Code Playgroud)

这是一个好的例外吗?我的代码的(假设的)未来维护者是否会追捕我并打击我的脸?

c++ oop encapsulation getter-setter member-variables

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

何时以及为何在堆C++上声明成员变量

好的,所以我对C++编程非常陌生,而且我已经花了几天的时间来寻找一个决定性的答案.什么时候我应该在堆与堆栈上声明成员变量?我发现的大多数答案都涉及其他问题,但我想知道何时最好将堆用于成员变量,以及为什么最好堆积成员而不是堆叠它们.

c++ heap class member-variables

15
推荐指数
2
解决办法
7781
查看次数

将新成员变量添加到python对象?

我已经开始阅读Magnus Lie Hetland的"从新手到专业的初学蟒蛇",今天令我印象深刻的是一个对象创建新成员变量的能力,即使这些成员变量不存在于该对象的类中被"创造"了.这是一个例子:

class Test:
    pass

b = Test()

b.variable1 = 12
b.variable2 = "Jim"

print b.variable1
print b.variable2
Run Code Online (Sandbox Code Playgroud)

到目前为止,我认为对象只能改变父类中存在的成员值,而不能凭空创建新的成员值?顺便说一句,我没有编程或python的先验知识.

python object member-variables

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

如何在成为类数据成员时调用指向成员函数的指针?

struct B
{
  void (B::*pf)(int, int);  // data member
  B () : pf(&B::foo) {}
  void foo (int i, int j) { cout<<"foo(int, int)\n"; } // target method
};

int main ()
{
  B obj;
  // how to call foo() using obj.pf ?
}
Run Code Online (Sandbox Code Playgroud)

在上面的测试代码中,pf是一个数据成员B.调用它的语法规则是什么?它应该是直截了当的,但我没有得到正确的匹配.例如,如果我尝试,obj.*pf(0,0);那么我得到:

error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘pf (...)’, e.g. ‘(... ->* pf) (...)’
Run Code Online (Sandbox Code Playgroud)

c++ member-function-pointers member-variables

11
推荐指数
3
解决办法
6142
查看次数