相关疑难解决方法(0)

Java中的public,protected,package-private和private有什么区别?

在Java中,有没有关于何时使用每个访问修饰符,即默认明确的规则(包私有)public,protected并且private,同时使classinterface和处理继承?

java private protected public access-modifiers

3004
推荐指数
24
解决办法
201万
查看次数

为什么我们在C++中实际需要私有或受保护的继承?

在C++中,我想不出一个我希望从基类继承private/protected的情况:

class Base;
class Derived1 : private Base;
class Derived2 : protected Base;
Run Code Online (Sandbox Code Playgroud)

它真的有用吗?

c++ inheritance private protected c++-faq

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

什么是访问说明符?我应该继承私人,受保护还是公共?

关于继承的访问修饰符的含义我很困惑.是什么涉及继承之间的区别private,protected以及public关键字?

c++ private class protected

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

如何在派生类中隐藏基类公共属性

我想在我的派生类中隐藏基本公共属性(数据成员):

class Program
{
    static void Main(string[] args)
    {
        b obj = new b();
        obj.item1 = 4;// should show an error but it doent ???
    }
}

class a
{
    public int item1 {get; set;}
    public int item2 { get; set; }
}

class b : a
{
    new private int item1;
}

class c : a
{

}
Run Code Online (Sandbox Code Playgroud)

我有成员公开因为我希望成员在c类中继承,但是想要隐藏b类中的成员,我该怎么做?

我没有选择继承我想要在我的基类中的变量??? 多数民众赞成真的很糟糕,我认为ms应该为我们提供一个选项(可能是修改器)来执行此操作


编辑:

我自己找到了答案(我听到很多人告诉我这在c#中是不可能的,但你可以这样做)

我包含代码以防它有用

class Program
{
    static void Main(string[] args)
    {
        b obj = new b();
        obj.item1 = …
Run Code Online (Sandbox Code Playgroud)

c#

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

在派生类声明中使用"Public"?

鉴于此基类:

class Employee
{
     char* name;
     int age;

  public:
     Employee(char* name);
     void print();
};
Run Code Online (Sandbox Code Playgroud)

关于"公众",这有什么区别:

class Manager : public Employee
{
   EmployeeList employees;

   public:
     Manager(char* name, Employee* people);
     void print();
};
Run Code Online (Sandbox Code Playgroud)

还有这个:

class Manager : Employee
{
   EmployeeList employees;

  public:
     Manager(char* name, Employee* people);
     void print();
};
Run Code Online (Sandbox Code Playgroud)

c++ public derived

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

有效的C++:阻止受保护的继承?

我正在阅读Scott Meyers的Effective C++(第三版),在第32项的一段中:确保公共继承是第151页的"is-a",他发表了评论(我以粗体显示):

这仅适用于公共继承.只有当Student公开派生于Person时,C++才会表现得如我所描述的那样.私有继承意味着完全不同的东西(见第39项),受保护的继承是我今天的意义所在.

问题是:我该如何解释这个评论?迈耶斯试图传达受保护的遗产很少被认为是有用的,应该避免吗?

(我已经阅读了私有,公共和受保护的继承以及C++ FAQ Lite的私有和受保护的继承部分之间区别问题,这两个部分都解释了受保护的继承意味着什么,但是没有让我深入了解何时或为什么它会有用.)

c++ inheritance effective-c++

22
推荐指数
2
解决办法
3697
查看次数

公共访问声明不影响成员函数指针?

我有一个关于g ++(版本5.1)下的访问声明的问题.

class Base
{
public:
    void doStuff() {}
};

class Derived : private Base
{
public:
    // Using older access declaration (without using) shoots a warning
    // and results in the same compilation error
    using Base::doStuff;
};

template<class C, typename Func>
void exec(C *c, Func func)
{
    (c->*func)();
}

int main()
{
    Derived d;
    // Until here, everything compiles fine
    d.doStuff();
    // For some reason, I can't access the function pointer
    exec(&d,&Derived::doStuff);
}
Run Code Online (Sandbox Code Playgroud)

g ++无法使用以下代码编译上述代码:

test.cpp:实例化'void exec(C*,Func)[用C = Derived; …

c++ inheritance language-lawyer

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

受保护的继承有什么实际用途?

公共继承很容易.

答:公共B意味着每个A都是B.在大多数编程语言中,如vb.net和objective-c,这是唯一的继承类型.

私人继承也很容易,但毫无意义

答:私人B意味着A由B实现.但是,这是毫无意义的,因为这意味着A应该包含B. 所有权意味着更少的耦合,没有缺点.

然后我们有保护继承.

任何人都可以向我解释这到底是为了什么?有人说这是"作为一种关系".我还不是很清楚.

有没有人有一些样本案例,人们使用受保护的继承以良好的模式(和良心)实际生产用途?

c++ inheritance protected

13
推荐指数
2
解决办法
4391
查看次数

C++为什么要使用公共,私有或受保护的继承?

那么有关于这个主题的足够信息.例如,这个线程对我来说非常清楚:私有,公共和受保护的继承之间的区别

除了一点; 为什么有用?

c++ inheritance private protected public

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

私人继承在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
查看次数