目录
C++ struct的使用:
1.1 默认访问控制(Access Control):
1.2. 继承权限(Inheritance Access):
1.3. 构造函数、析构函数、成员函数:
2. 与c语言的对比
C语言中的区别:
在C/C++中,struct(结构体)和 class(类)都是用来创建自定义数据类型的关键字,但是也有许多不同之处
C++ struct的使用:
在复习之前,首先将struct的功能与class进行一下对比差异:
1.1 默认访问控制(Access Control):
struct:成员默认是 public 的。也就是说,在结构体中声明的变量和方法是可以被外部代码直接访问的。
class:成员默认是 private 的。也就是说,在类中声明的变量和方法默认只能在类的内部访问,外部代码无法直接访问。
struct MyStruct {int x; // 默认是 public
};class MyClass {int x; // 默认是 private
};
1.2. 继承权限(Inheritance Access):
struct:默认继承权限为 public。也就是说,继承自结构体时,基类的成员会是 public。
class:默认继承权限为 private。也就是说,继承自类时,基类的成员会是 private。
struct BaseStruct {int x;
};struct DerivedStruct : BaseStruct {  // 默认 public 继承void print() {std::cout << x << std::endl;  // 可以访问基类成员}
};class BaseClass {int x;
};class DerivedClass : BaseClass {  // 默认 private 继承void print() {// std::cout << x << std::endl;  // 编译错误,x 是 private}
};
1.3. 构造函数、析构函数、成员函数:
- struct:在C++中,- struct和- class都可以有构造函数、析构函数和成员函数。没有语言上的限制。
- class:和- struct一样,- class也支持构造函数、析构函数、成员函数。
struct MyStruct {int x;MyStruct(int val) : x(val) {} // 构造函数~MyStruct() {} // 析构函数void display() { std::cout << x << std::endl; } // 成员函数
};class MyClass {int x;
public:MyClass(int val) : x(val) {} // 构造函数~MyClass() {} // 析构函数void display() { std::cout << x << std::endl; } // 成员函数
};
2. 与c语言的对比
C语言中的区别:
struct:在C语言中,struct 是唯一的方式来定义复合数据类型。C语言中没有 class 关键字,因此类的概念在C中是没有的。C语言中的 struct 可以包含成员变量,但不能包含方法(函数)。