结构体编辑C++增加了class类型后

本文深入探讨了C++中结构体与类的特性,详细解释了它们的功能扩展、封装特点以及如何根据需求选择合适的类型。强调了在面向对象编程中使用类的优劣,并给出了具体实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      结构体编辑C++增加了class类型后,仍保留了结构体类型(struct ),而且把它的功能也扩展了。C++允许用struct来定义一个类型。如可以将前面用关键字class声明的类类型改为用关键字struct:


  14structStudent{//用关键字struct来声明一个类类型


  private://声明以下部分为私有的


  intnum;//以下3行为数据成员


  charname[20];


  charsex;


  public://声明以下部分为公用的


  voiddisplay(){//成员函数


  Studentstud1,stud2;//定义了两个Student类的对象


  为了使结构体类型也具有封装的特征,C++不是简单地继承C的结构体,而是使它也具有类的特点,以便于用于面向对象程序设计。用struct声明的结构体类型实际上也就是类。用struct声明的类,如果对其成员不作private或public的声明,系统将其默认为public。


  如果想分别指定私有成员和公用成员,则应用private或public作显式声明。


  而用class定义的类,如果不作private或public声明,系统将其成员默认为private,在需要时也可以自己用显式声明改变。如果希望成员是公用的,使用struct比较方便,如果希望部分成员是私有的,宜用class。建议尽量使用class来建立类,写出完全体现C++风格的程序。
### C++ 结构体与类的区别和用法 #### 定义上的差异 在 C++ 中,`struct` 和 `class` 都可以用来定义新的复合数据类型。然而,默认访问控制级别不同:对于 `struct` 默认成员权限是公有的(public),而对于 `class` 则默认为私有(private)[^1]。 #### 成员函数与变量 无论是 `struct` 还是 `class`,都可以包含成员函数以及静态或非静态的数据成员。这意味着两者都能实现封装、继承多态等面向对象特性。 #### 继承方式 当一个结构体或者类从另一个派生时,在不指定可见性的情况下,如果基类是 `struct` ,那么子类将以公共形式继承;而如果是 `class` 的话,则会以私有方式进行继承。 ```cpp // Struct inheritance example struct BaseStruct { int baseValue; }; struct DerivedStruct : public BaseStruct {}; // Public by default for structs // Class inheritance example class BaseClass { protected: int protectedMember; }; class DerivedClass : private BaseClass {}; // Private by default for classes ``` #### 使用场景建议 尽管功能上几乎相同,但在实际编码过程中通常遵循一些约定俗成的习惯: - 当创建简单的聚合类型(即只是一些字段组合在一起),倾向于使用 `struct`; - 对于更复杂的设计模式或是需要严格控制内部状态的对象模型来说,应该优先考虑采用 `class` 来构建。 #### 示例代码展示如何声明并初始化这两种类型的实例 ```cpp #include <iostream> // Simple data structure using struct struct Point { double x, y; void printPoint() const { std::cout << "(" << x << ", " << y << ")" << std::endl; } }; // More complex object-oriented design with class class Rectangle { private: Point topLeftCorner; double width, height; public: Rectangle(double w, double h):width(w),height(h){} void setTopLeft(const Point& p) {topLeftCorner = p;} friend std::ostream& operator<<(std::ostream& os,const Rectangle&); }; std::ostream& operator<<(std::ostream& os,const Rectangle& rect){ os<<"Rectangle at:"<<rect.topLeftCorner.x<<","<<rect.topLeftCorner.y<<"\nWidth:"<<rect.width<<"\tHeight:"<<rect.height; return os; } int main(){ Point point{3.5,-7.2};point.printPoint(); Rectangle rectangle(8.0,9.0); Point newLocation{-4.0,6.0}; rectangle.setTopLeft(newLocation); std::cout<<rectangle; return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值