IT技术博客大学习 共学习 共进步

标签:Class

共 4 篇相关文章

IT 累计浏览 4,880

struct与class区别联系

这篇讲的是C和C++中`struct`这个看似相同的关键字,其实内核大不相同。作者开篇就指出了核心区别:C中的`struct`是“原生”的,仅仅用来将一组属性打包成一个整体,没有任何面向对象(OO)的特性。而C++中的`struct`则是在此基础上做了深度扩展,它完全兼容C的用法,但更重要的是具备了OO特性——事实上,C++中`class`能干的事情,`struct`几乎都能干,包括继承和多态。 文章通过一个直观的代码示例验证了这一点:如果在纯C环境下(例如用GCC的C模式编译),在`struct`内部直接定义成员函数会导致编译报错;但同样的代码在C++中则毫无问题。这生动地说明了“原生”与“扩展”的差异。 那么,在C++中`struct`和`class`到底还有何区别?唯一的、关键的不同在于默认的访问权限:`struct`默认是`public`,而`class`默认是`private`。这个细微差别决定了代码风格和设计意图。通常,我们用`struct`来封装纯数据的聚合体,而用`class`来定义那些需要隐藏实现细节、提供接口的抽象数据类型。这篇小文通过对比和代码解析,清晰地帮你厘清了这个C++程序员常会遇到的疑惑。

IT 累计浏览 1,742

javascript继承机制

这篇讲的是 JavaScript 中实现继承的两种经典机制:构造函数继承与原型继承。作者从具体的代码示例出发,清晰地展示了 `Animal.apply(this, arguments)` 这种构造函数继承如何复用父类构造函数中的属性,同时点明了它无法继承原型方法的局限性。 文章的核心在于对比。它指出,如果使用 `class.prototype = new parent_class()` 的原型继承方式,则能同时继承父类构造函数和原型上的属性与方法。此外,文章还细致地区分了 `call` 与 `apply` 在传参方式上的不同,并通过反例(如在构造函数内使用 `this.prototype`)强调了原型继承的正确写法。 最后,作者给出了一个精炼的总结:根据是否需要继承原型方法来选择继承方式——若只需构造函数内的成员,用 `apply/call`;若需要原型链上的完整继承,则用原型赋值。这种对比式的讲解,帮助开发者快速理解不同继承模式的核心差异与适用场景。

IT 累计浏览 3,300

Javascript 面向对象编程

这篇讲的是Javascript面向对象编程的核心概念与实践。作者从整体角度出发,将Javascript与更传统的类C语言(如C++/Java)进行对比,指出Javascript的面向对象实现虽然风格“比较奇怪”,但功能强大。文章结合了Todd同学提出的“对象的消息模型”观点,试图系统性地梳理Javascript中对象创建、原型链等独特机制。 不同于语法规整的类继承体系,Javascript通过原型和闭包等方式实现OOP,这使其在灵活性上具有优势,但也带来了理解上的挑战。作者坦言成文仓促,旨在为前同事及相关开发者提供一个清晰的整体认知框架,而非面面俱到的教程。对于想理解Javascript为何“奇怪却强大”的开发者,这篇文章提供了一个不错的切入视角。

IT 累计浏览 2,660

C++讲解

这篇讲的是C++对C语言结构体的一次重要功能扩展。作者直接切入两者最核心的差异:在C语言中,结构体(struct)仅用于封装数据,内部不允许定义成员函数;而到了C++,结构体被赋予了更完整的能力,可以像类(class)一样包含函数。 这个改变不仅仅是语法层面的“补全”,它带来了编程范式的演进。C++通过允许结构体承载行为(函数),使得数据与操作其数据的逻辑能够被紧密地组织在一起,这为面向对象编程中“封装”概念的实现铺平了道路。在C++中,`struct`和`class`默认的区别仅在于访问控制(`struct`默认公有,`class`默认私有),而在功能上已趋于一致。 因此,文章点明了C++结构体更适用于需要将数据及其相关操作作为一个整体来管理的场景,而C语言的结构体则专注于纯粹的数据组合。这个对比,清晰地揭示了C++在类型系统设计上的一次重要进化。