结构体是公共的,而类可以是公共的或私有的。

14 浏览
0 Comments

结构体是公共的,而类可以是公共的或私有的。

在我的面试中,我被问到一个问题:\"struct和class之间有什么区别?\"我简单地回答道:\"struct的成员只能是公共的,而class的成员可以声明为公共或私有。\"但现在我对我的回答有点困惑。我一直在互联网上搜索struct和class的区别,但没有找到这样的区别。我的回答对雇主来说是不正确的吗?如果是的,除了默认情况下class的成员是私有的,而struct的成员是公共的之外,它们之间还有什么区别?

0
0 Comments

在C++中,结构体(struct)和类(class)之间存在一些差异。默认情况下,类的成员是私有的(private),而结构体的成员是公共的(public)。这意味着在类中定义的成员变量和成员函数只能在类的内部访问,而在结构体中定义的成员变量和成员函数可以在结构体的外部访问。

不仅如此,这种差异还应用到它们的基类上:默认情况下,类之间的继承是私有的(private),而结构体之间的继承是公共的(public)。也就是说,类的基类中的成员只能在类的内部以及派生类的内部访问,而结构体的基类中的成员可以在结构体的外部访问。

这就导致了一个问题:在C++中,结构体和类之间的区别似乎并不明显,因为它们可以用相同的方式来定义相同的类型。因此,通过默认的访问权限,结构体和类之间的区别变得模糊。

要解决这个问题,我们可以显式地指定结构体或类的访问权限。通过在结构体或类的定义前加上关键字public或private,我们可以明确表达它们的访问权限。例如,如果我们想要让一个类的成员变量和成员函数在类的外部也可访问,我们可以将类的定义改为public。同样地,如果我们想要让一个结构体的基类中的成员只能在结构体的内部访问,我们可以将结构体的定义改为private。

下面是一个示例代码,演示了如何显式指定结构体或类的访问权限:

class MyClass {
public:
    int publicVariable;
private:
    int privateVariable;
public:
    void publicMethod() {
        // 该方法可以在类的内部和外部访问
    }
private:
    void privateMethod() {
        // 该方法只能在类的内部访问
    }
};
struct MyStruct {
public:
    int publicVariable;
private:
    int privateVariable;
public:
    void publicMethod() {
        // 该方法可以在结构体的内部和外部访问
    }
private:
    void privateMethod() {
        // 该方法只能在结构体的内部访问
    }
};

通过显式指定访问权限,我们可以更清晰地定义结构体和类的行为,避免了由默认访问权限引起的混淆。

0