C ++ - 派生类是否继承基类的静态成员?

时间:2016-03-28 01:18:06

标签: c++ inheritance static

我有一个基类GameObject,它有一个成员

static Cell **grid;

我还有一个派生类Character,它是另一个类Player的基类。所以我的问题是:GameObject,Character和Player类的所有对象都可以访问同一个网格吗?

3 个答案:

答案 0 :(得分:3)

@Override public Fragment getItem(int position) { // getItem is called to instantiate the fragment for the given page. // Return a PlaceholderFragment (defined as a static inner class below). noDep = list_nodep[position]; Bundle bundle = new Bundle(); bundle.putString("NO_DEP", noDep); bundle.putString("DATE", date); bundle.putString("USERNAME", username); bundle.putString("DB_IP", dbIP); bundle.putString("DB_NAME", dbName); bundle.putString("DB_USER", dbUsername); bundle.putString("DB_PASS", dbPassword); bundle.putString("SERVER_IP", serverIP); PlaceholderFragment fragment = new PlaceholderFragment(); fragment.setArguments(bundle); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_line_detail_tabs, container, false); activity = (LineDetailTabs) getActivity(); noDep = getArguments().getString("NO_DEP"); date = getArguments().getString("DATE"); username = getArguments().getString("USERNAME"); dbIP = getArguments().getString("DB_IP"); dbName = getArguments().getString("DB_NAME"); dbUsername = getArguments().getString("DB_USER"); dbPassword = getArguments().getString("DB_PASS"); serverIP = getArguments().getString("SERVER_IP"); loadData(noDep, date, username, dbIP, dbName, dbUsername, dbPassword); tvHeader = (TextView) rootView.findViewById(R.id.txtHeader); tvPO = (TextView) rootView.findViewById(R.id.txtPO); //... return rootView; } Player。所以是的,他们都可以访问静态Character

......当然受到访问保护(如Sam所指出)。因此,您需要在GameObjectgrid区域内声明grid以确保此为真,此外,您需要使用public或{{1来声明继承模式:

protected

答案 1 :(得分:1)

基类的静态类成员是否可用于类层次结构中的直接派生类,派生程度最大的类或其间任何其他类的规则取决于:

  • 静态类成员是公共的,受保护的还是私有的。

  • 并且,在继承链中,每个类是否将基类作为公共类,受保护类或私有类继承。

所以问题的答案是:依赖。取决于这些因素。

答案 2 :(得分:1)

我相信除非您明确使用受保护的修饰符,否则此属性将被视为私有。在您的示例中,您没有使用受保护的公开作为前缀,因此它将被视为私有,因此无法在派生类中访问。