标签: private

隐藏私人数据成员?(C++)

有没有办法在cpp文件中隐藏C++类的私有数据成员远离其用户?我认为私有成员是实现的一部分,在头文件中声明它们似乎有些倒退.

c++ private class

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

对字段和方法使用private而不是protected的原因

这是一个相当基本的OO问题,但是一段时间以来一直困扰着我.

我倾向于避免使用'private'可见性修饰符来支持我的字段和方法protected.

这是因为,一般来说,我没有看到在基类和子类之间隐藏实现的任何用法,除非我想为我的类的扩展设置特定的指导(即在框架中).对于大多数情况,我认为试图限制我的课程将由我或其他用户扩展是不利的.

但是,对于大多数人来说,private修饰符通常是定义非公共字段/方法时的默认选择.

那么,你可以列出用例private吗?总是使用私有的主要原因是什么?或者您是否也认为它过度使用?

oop visibility private protected

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

阻止git分支被推送

情况如下:

我在github.com上有我的开源应用程序的公共存储库.但是,现在我想编写一些不公开的特定代码(我可能会在我的应用程序的商业版本中使用它).

我想我可以使用相同的存储库,并且我会在我的git存储库中创建一个"私有"分支,我不会推送它.

但是,错误发生了.有没有办法禁止git将分支推送到远程服务器?

如果有更好的方法来处理这种情况,我当然欢迎任何建议.

git branch private

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

受保护和私有有什么区别?

可能重复:
私有和受保护的成员:C++

我不明白受保护成员或私有成员或方法之间的区别,因为我认为它们都会隐藏成员或从类外部访问的函数.

protected和private关键字有什么区别?

c++ oop private class protected

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

私有接口方法,例如用例?

"作为添加对Lambda表达式的支持的努力的一部分,简单地考虑将接口中的私有方法支持包含在Java SE 8中,但是为了更好地关注Java SE 8的更高优先级任务而被撤回.现在提议支持私有接口方法,从而使接口的非抽象方法能够在它们之间共享代码."

所以说http://openjdk.java.net/jeps/213的规范, 并在错误报告https://bugs.openjdk.java.net/browse/JDK-8071453中说.

但是,即使有上面​​给出的简短解释,我也无法想到任何必要的用例.我可以问一个例子,"私有接口方法"在代码方面是否有用?

编辑:所以答案是,由于Java 8中的接口添加了默认实现,可能存在默认实现使用相同代码库的情况.

例如,

public interface MyInterface {
     default void initializeMyClass(MyClass myClass, Params params) {
         //do magical things in 100 lines of code to initialize myClass for example
     }

     default MyClass createMyClass(Params params) {
         MyClass myClass = new MyClass();
         initializeMyClass(myClass, params);
         return myClass;
     }

     default MyClass createMyClass() {
         MyClass myClass = new MyClass();
         initializeMyClass(myClass, null);
         return myClass;
     }
}
Run Code Online (Sandbox Code Playgroud)

愚蠢的例子,我知道.但是,让我们说我们想要initializeMyClass(MyClass, Params)在两种方法中使用.但是,如果我们这样做(默认方法),那么initializeMyClass(MyClass, Params)将成为公共接口的一部分!为了防止这种情况发生,我们只能将整个代码保留initializeMyClass(MyClass, Params) …

java private interface java-9

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

使用GoogleTest测试私有方法的最佳方法是什么?

我想使用GoogleTest测试一些私有方法.

class Foo
{
private:
    int bar(...)
}
Run Code Online (Sandbox Code Playgroud)

GoogleTest允许使用两种方法.

选项1

使用FRIEND_TEST:

class Foo
{
private:
    FRIEND_TEST(Foo, barReturnsZero);
    int bar(...);
}

TEST(Foo, barReturnsZero)
{
    Foo foo;
    EXPECT_EQ(foo.bar(...), 0);
}
Run Code Online (Sandbox Code Playgroud)

这意味着在生产源文件中包含"gtest/gtest.h".

方案2

将测试夹具声明为类的朋友并在夹具中定义访问器:

class Foo
{
    friend class FooTest;
private:
    int bar(...);
}

class FooTest : public ::testing::Test
{
protected:
    int bar(...) { foo.bar(...); }
private:
    Foo foo;
}

TEST_F(FooTest, barReturnsZero)
{
    EXPECT_EQ(bar(...), 0);
}
Run Code Online (Sandbox Code Playgroud)

方案3

该PIMPL方法.

有关详细信息:Google测试:高级指南.

有没有其他方法来测试私有方法?每种选择有哪些优缺点?

c++ unit-testing private googletest

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

关于字段的私有静态最终关键字的快速Java问题

我宣布一个字段:

private static final String filename = "filename.txt";
Run Code Online (Sandbox Code Playgroud)

首先,private static final物质的顺序是什么?如果没有,是否有标准接受的序列或惯例?

其次,filename在我的应用程序中是固定的.这是最好的存储价值吗?

java static final private

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

有没有办法让Rails ActiveRecord属性私有?

默认情况下,ActiveRecord从相应的数据库表中获取所有字段,并为所有字段创建公共属性.

我认为不公开模型中的所有属性是合理的.更重要的是,暴露出用于内部使用的属性会使模型的界面混乱,并违反封装原则.

那么,有没有办法从字面上制作一些属性private?

或者,也许我应该转向其他ORM?

activerecord private ruby-on-rails

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

使用java反射实例化私有内部类

是否可以使用Java反射从另一个类实例化私有内部类.例如,如果我采用此代码

public class Main {
    public static void main(String[] args) {}
}

class OtherClass {
    private class Test {}
}
Run Code Online (Sandbox Code Playgroud)

是否可以从类main中的main方法实例化并获得对Test的访问权限.

java reflection private class inner-classes

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

Python继承 - 如何禁用一个函数

在C++中,您可以通过在子类中将其声明为私有来禁用父类中的函数.如何在Python中完成?IE如何从子公共接口隐藏父功能?

python inheritance private interface

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