C++中struct和class在继承上本质相同,区别仅在于默认访问权限:struct默认public,class默认private,显式指定后行为一致。

C++中的
struct
class
struct
class
谈到
struct
class
struct
class
最直接的兼容性体现在,一个
struct
class
class BaseClass {
public:
int x;
protected:
int y;
private:
int z;
};
struct DerivedStruct : BaseClass { // 默认是public继承
int a;
void print() {
// x 可访问
// y 可访问
// z 不可访问
}
};
struct AnotherBaseStruct {
public:
void func() {}
};
class AnotherDerivedClass : AnotherBaseStruct { // 默认是private继承
// func() 在这里是private的
};你看,这完全没问题。关键在于理解默认访问权限。
struct
public
public
class
private
private
class Derived : public Base {}立即学习“C++免费学习笔记(深入)”;
所以,与其纠结于
struct
class
struct
class
当我们深入探讨
struct
class
对于
struct
public
struct Derived : Base {}Derived
public
Base
Base
public
Derived
public
protected
Derived
protected
struct
相反,
class
class
private
class
private
class Derived : Base {}class Derived : private Base {}Base
public
protected
Derived
private
Derived
Base
public
Derived
private
举个例子:
class Base {
public:
void public_func() {}
protected:
void protected_func() {}
};
struct DerivedStruct : Base {}; // 默认 public继承
class DerivedClass : Base {}; // 默认 private继承
int main() {
DerivedStruct ds;
ds.public_func(); // OK, public继承,public_func依然public
DerivedClass dc;
// dc.public_func(); // 编译错误!private继承后,public_func变为private
return 0;
}这个例子清楚地展示了默认继承方式的差异。所以,异同的核心不在于它们能否继承,而在于它们在没有显式指定访问权限时,所采取的“立场”——
struct
class
在实际的项目开发中,
struct
class
如果我需要定义一个主要用于数据聚合,且其成员大多需要公开访问的类型,我更倾向于使用
struct
struct
public
public:
struct Point {
double x, y;
};
struct ColoredPoint : Point { // 默认public继承,表示ColoredPoint也是一种Point
std::string color;
};这里,
ColoredPoint
Point
Point
struct
然而,当涉及到更复杂的对象,需要维护内部状态的不变性、提供受控接口、或者实现多态行为时,我几乎总是选择
class
class
private
private
public
private
protected
最佳实践往往是保持一致性。在一个继承体系中,如果你以
class
class
Shape
class
Circle
Rectangle
class
此外,还有一种常见的约定:
struct
struct
class
简单来说,
struct
class
这是一个非常好的问题,它触及了
struct
class
struct
C++中的多态性(Polymorphism)和虚函数(Virtual Functions)机制是基于“类”的概念实现的,而
struct
struct
class
因此,一个
struct
class
#include <iostream>
#include <memory> // For std::unique_ptr
// struct作为基类,拥有虚函数
struct BaseShape {
virtual void draw() const {
std::cout << "Drawing a generic shape." << std::endl;
}
virtual ~BaseShape() = default; // 虚析构函数以上就是C++结构体与类继承的兼容性分析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号