class struct

struct、class定义类
先看一下如何定义struct、class的类

可以注意到我们这里只调用了struct类型的类,而没有调用class类型的类,原因是struct默认的成员是public的,

class默认的成员是private的。

private限制的成员不能被外部访问(但是类内部没有问题),而public可以所以我们这样写,来public class类。

#include <iostream>
using namespace std;
struct apple
{     //成员变量,描述类的属性,例如苹果的颜色,苹果的味道
      string color;
      string taste;
      //成员函数,即类的方法,(能做什么)例如,可以被吃
      void eat(){
         cout<<"the "<<color<<" and "<<taste<<" apple can be eat"<<endl;
          }
};

class pear{
  string color;
  string taste;
  void eat(){
     cout<<"the "<<color<<" and "<<taste<<" pear can be eat"<<endl;
   }
};
int main(int argc, char *argv[])
{  struct apple apple1;
     apple1.color="red";
     apple1.taste="sweet";
     apple1.eat();

    struct apple apple2;
    apple2.color="green";
    apple2.taste="sour";
    apple2.eat();

    class pear pear1;
    return 0;
}

然后我们用指针访问一下类中的成员,用->符号就可以了

#include <iostream>
using namespace std;
class pear{
  public:
      string color;
      string taste;
    void eat(){
    cout<<"the "<<color<<" and "<<taste<<" pear can be eat"<<endl;
    }
};
int main(int argc, char *argv[])
{  class pear pear1;
   class pear *ppear1=&pear1;
      ppear1->color="yellow";
      ppear1->taste="sweet";
      ppear1->eat();

   class pear pear2;
   class pear *ppear2=&pear2;
     ppear2->color="green";
     ppear2->taste="bitter";
     ppear2->eat();
    return 0;
}

C++ class和struct到底有什么区别

C++ 中保留了C语言的 struct 关键字,并且加以扩充。在C语言中,struct 只能包含成员变量,不能包含成员函数。而在C++中,struct 类似于 class,既可以包含成员变量,又可以包含成员函数。

C++中的 struct 和 class 基本是通用的,唯有几个细节不同:

  • 使用 class 时,类中的成员默认都是 private 属性的;而使用 struct 时,结构体中的成员默认都是 public 属性的。
  • class 继承默认是 private 继承,而 struct 继承默认是 public 继承(《C++继承与派生》一章会讲解继承)。
  • class 可以使用模板,而 struct 不能(《模板、字符串和异常》一章会讲解模板)。

C++ 没有抛弃C语言中的 struct 关键字,其意义就在于给C语言程序开发人员有一个归属感,并且能让C++编译器兼容以前用C语言开发出来的项目。

在编写C++代码时,我强烈建议使用 class 来定义类,而使用 struct 来定义结构体,这样做语义更加明确。


使用 struct 来定义类的一个反面教材:

  1. #include <iostream>
  2. using namespace std;
  3. struct Student{
  4. Student(char *name, int age, float score);
  5. void show();
  6. char *m_name;
  7. int m_age;
  8. float m_score;
  9. };
  10. Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){ }
  11. void Student::show(){
  12. cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
  13. }
  14. int main(){
  15. Student stu("小明", 15, 92.5f);
  16. stu.show();
  17. Student *pstu = new Student("李华", 16, 96);
  18. pstu -> show();
  19. return 0;
  20. }

运行结果:

小明的年龄是15,成绩是92.5

李华的年龄是16,成绩是96

这段代码可以通过编译,说明 struct 默认的成员都是 public 属性的,否则不能通过对象访问成员函数。如果将 struct 关键字替换为 class,那么就会编译报错。

若有收获,就点个赞吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangchuang2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值