一、struct 和 class 关键字定义类的区别




1、struct 和 class 关键字作用


在 C++ 语言中 , 使用 struct 和 class 关键字 , 都可以 用于定义 类 , 这些被定义的类 都 具有相似的语法和功能 , 只是在默认情况下有一些不同的行为 ;

在 C 语言中 , 使用 struct 关键字 , 可以定义结构体 ; 没有 class 关键字 ;


2、类的默认访问权限


struct 和 class 关键字 定义的类 的 默认访问权限 不同 ,

  • 使用 struct 关键字 定义的类 , 成员的默认访问权限是 public , 可以在 类的内部 和 类的外部 访问 ;
  • 使用 class 关键字 定义的类 , 成员的默认访问权限是 private , 只能在 类的内部 访问 ;

下面的代码中 , 使用 struct 关键字 定义的 Student 类中的 成员变量 age 没有显式声明访问权限 , 其默认的成员的访问权限是 public , 可以在 类的外部 和 类的内部 访问 ;

struct Student {  
	// 默认的成员的访问权限是 public 
	// 可以在 类的外部 和 类的内部 访问 
    int age;
};  

下面的代码中 , 使用 class 关键字 定义的 Teacher 类中的 成员变量 age 没有显式声明访问权限 , 其默认的成员的访问权限是 private , 只能在 类的内部 访问 ;

class Teacher{  
	// 默认的成员的访问权限是 private
	// 只能在 类的内部 访问
    int age;
};

3、类的默认继承方式


struct 和 class 关键字 定义的类 的 默认 继承方式 不同 ,

  • 使用 struct 关键字 定义的类 , 成员的默认 继承方式是 public ;
  • 使用 class 关键字 定义的类 , 成员的默认 继承方式是 private ;

在 C++ 语言中 , 子类 继承 父类 时 可以获取父类的所有 属性 和 行为 ;

C++ 的 继承 可以通过使用冒号 : 和 访问修饰符 public / protected / private 来定义 ;

子类可以继承父类的 3 种方式 :

  • 公有继承 public : 子类 继承 父类的 公有成员 和 保护成员 , 可以将它们作为自己的公有成员和保护成员对外公开 ;
  • 保护继承 protected : 子类 继承 父类的 保护成员 , 子类可以访问父类中的保护成员 , 但不能访问父类中的公有成员 ;
  • 私有继承 private : 子类 继承 父类的 私有成员 ; 不能访问 父类的 公有 和 保护成员 ;

使用 struct 关键字 定义的类 , 成员的默认 继承方式是 public ,

// 默认是 public 继承  
struct Student : public Person { 
    // ...  
};  

使用 class 关键字 定义的类 , 成员的默认 继承方式是 private ;

// 默认是 private 继承  
class Teacher : private Person { 
    // ...  
};

4、struct 和 class 关键字 的 推荐用法


在实际开发中 , 推荐使用 class 关键字 定义 类 , 推荐使用 struct 关键字 定义 结构体 ;

09-09 02:49