interview
object-oriented-c
C 中 struct 和 class 的区别

C++ 面向对象面试题, C++ 中 struct 和 class 的区别?

C++ 面向对象面试题, C++ 中 struct 和 class 的区别?

QA

Step 1

Q:: C++ 中 struct 和 class 的区别?

A:: 在C++中,struct和class有以下主要区别: 1. 默认访问控制:struct的成员默认是public的,而class的成员默认是private的。 2. 继承:struct的默认继承访问控制是public的,而class的默认继承访问控制是private的。 3. 用途:struct一般用于定义数据结构,而class则更倾向于定义对象及其行为。

除此之外,struct和class在C++中本质上是相同的,二者都可以有成员函数、构造函数、析构函数、访问控制、继承、多态等特性。

Step 2

Q:: C++ 中 struct 和 class 可以互相替代吗?

A:: 在大多数情况下,struct和class是可以互相替代的,因为它们在语法和功能上几乎完全相同。唯一需要注意的是它们的默认访问控制和继承访问控制。在设计数据结构时,更推荐使用struct,而在设计具有行为的对象时,更推荐使用class。

Step 3

Q:: C++ 中为什么要区分 struct 和 class?

A:: 区分struct和class主要是为了编程的清晰性和语义化。使用struct可以明确表示这是一个简单的数据结构,而使用class可以表示这是一个包含数据和行为的复杂对象。这种区分有助于代码的可读性和维护性。

Step 4

Q:: 如何在 C++ 中实现 struct 和 class 的继承?

A:: 在C++中,struct和class都支持继承。继承的语法是相同的,只是默认的访问控制不同。例子:

 
struct BaseStruct {
    int value;
};
 
struct DerivedStruct : public BaseStruct {
    void setValue(int val) { value = val; }
};
 
class BaseClass {
private:
    int value;
public:
    void setValue(int val) { value = val; }
};
 
class DerivedClass : public BaseClass {
    void display() { std::cout << value << std::endl; }
};
 

在上述代码中,BaseStruct的成员默认是public的,而BaseClass的成员默认是private的。

Step 5

Q:: 在 C++ 中 struct 和 class 的使用场景有哪些?

A:: 在C++中,struct通常用于以下场景: 1. 定义简单的数据结构,例如点(Point)、矩形(Rectangle)等。 2. 用于数据传递,尤其是在需要与C语言兼容的情况下。

class通常用于以下场景: 1. 定义复杂的对象,包含数据和行为,例如用户(User)、订单(Order)等。 2. 设计模式的实现,例如单例模式、工厂模式等。 3. 实现多态性和继承关系。

用途

面试这个内容是为了考察候选人对C`++`语言基本概念的理解,特别是面向对象编程的基础知识。在实际生产环境中,struct和class的选择会直接影响代码的可读性、可维护性以及与其他代码的兼容性。了解二者的区别和适用场景能够帮助开发人员写出更加清晰、简洁和高效的代码。\n

相关问题

🦆
C++ 中的访问控制符有哪些?各自的作用是什么?

C++中有三种主要的访问控制符:public、protected和private。public表示公有成员,可以被任何代码访问;protected表示受保护成员,可以被本类及其子类访问;private表示私有成员,只能被本类访问。

🦆
C++ 中的多态性是什么?如何实现?

C++中的多态性是一种对象在不同场景下表现出不同行为的能力。实现多态性的方法主要有虚函数和接口。通过在基类中声明虚函数,并在派生类中重写这些虚函数,可以实现运行时的多态性。

🦆
什么是构造函数和析构函数?它们的作用是什么?

构造函数是类在实例化时自动调用的函数,用于初始化对象;析构函数是在对象生命周期结束时自动调用的函数,用于清理资源。构造函数和析构函数都是特殊的成员函数,构造函数可以重载,析构函数不能重载。

🦆
C++ 中的拷贝构造函数是什么?什么时候会调用?

拷贝构造函数用于创建一个对象,使其成为现有对象的副本。当对象以值传递的方式传递给函数、从函数返回或显式调用拷贝构造函数时,会调用拷贝构造函数。如果不显式定义拷贝构造函数,编译器会生成默认的拷贝构造函数。

🦆
C++ 中的虚函数和纯虚函数的区别是什么?

虚函数是在基类中使用关键字virtual声明的函数,可以在派生类中重写,实现多态性。纯虚函数是一种特殊的虚函数,没有具体实现,语法上在函数声明后加=0,表示该函数是抽象的,派生类必须重写它。含有纯虚函数的类是抽象类,不能实例化。

C++ 基础面试题, C++ 中 struct 和 class 的区别?

QA

Step 1

Q:: C++ 中 struct 和 class 的区别是什么?

A:: 在 C++ 中,struct 和 class 的主要区别在于默认的访问控制权限不同。在 struct 中,成员的默认访问控制权限是 public,而在 class 中,成员的默认访问控制权限是 private。这意味着在使用 struct 时,如果你没有明确指定成员的访问控制权限,它们将是公有的,而在使用 class 时,成员则默认是私有的。除此之外,struct 和 class 还可以分别包含成员函数、继承、构造函数和析构函数等功能,二者在功能上几乎是等价的。

Step 2

Q:: 如何选择使用 struct 还是 class?

A:: 选择 struct 或 class 主要取决于语义和约定。通常情况下,当你定义一个主要包含数据成员且所有成员都应该公开访问的简单数据结构时,使用 struct 更为合适。而当你定义的类型包含复杂的功能或需要严格控制成员访问权限时,class 会是更好的选择。

Step 3

Q:: C++ 中 struct 和 class 的继承方式有何不同?

A:: 在 C++ 中,struct 和 class 的继承方式的主要区别也是在于默认的访问控制权限。当使用 struct 继承时,继承的基类成员的默认访问权限为 public,而使用 class 继承时,继承的基类成员默认访问权限为 private。

Step 4

Q:: C++ 中 struct 能包含成员函数吗?

A:: 是的,C++ 中的 struct 可以包含成员函数。实际上,struct 和 class 在语法上几乎是等价的,struct 可以包含成员变量、成员函数、构造函数、析构函数以及其他所有 class 所能包含的特性。

用途

面试这个内容的原因在于,理解 struct 和 class 的区别对于掌握 C`++ 编程语言的基础知识是至关重要的。在实际生产环境中,了解它们之间的区别可以帮助开发者根据特定场景选择合适的数据结构和访问控制策略。struct 通常用于定义简单的数据结构,如传输数据时的包结构,而 class 则通常用于定义更复杂的对象和组件。面试官通过这个问题可以评估候选人是否理解 C++` 的基础概念以及是否能够在项目中合理使用这些概念。\n

相关问题

🦆
C++ 中什么是访问控制修饰符?

C++ 中的访问控制修饰符用于控制类和结构体成员的访问权限。主要有三种修饰符:public、protected 和 private。public 成员可以在任何地方访问,protected 成员只能在类的内部及其派生类中访问,而 private 成员只能在类的内部访问。

🦆
C++ 中如何实现多重继承?

C++ 支持多重继承,这意味着一个类可以从多个基类继承。多重继承的语法是在类定义时,用逗号分隔基类。例如:class Derived : public Base1, public Base2 {}。然而,多重继承需要小心使用,因为它可能导致“菱形继承问题”,即一个类通过多条继承路径继承同一个基类。

🦆
什么是 C++ 中的虚继承?

虚继承是 C++ 中解决多重继承菱形问题的一种机制。通过使用 virtual 关键字,基类在多重继承中只会被继承一次,从而避免了多个实例的生成。例如:class Derived : virtual public Base1 {}

🦆
C++ 中的构造函数与析构函数有什么作用?

构造函数用于在创建对象时初始化对象的状态,而析构函数则用于在对象销毁时执行清理操作。构造函数可以重载,而析构函数不能。析构函数通常用于释放资源,如关闭文件、释放内存等。