1、继承的基本概念
继承是C++面向对象编程的三大核心特性之一(继承、封装、多态),它允许我们基于现有类创建新类。
2、继承的语法
// 基本语法
class BaseClass {
// 基类成员
};
class DerivedClass : access-specifier BaseClass {
// 成员定义
};
// access-specifier 可以是:public, protected, private
3、三种继承方式
继承方式对比表格
继承方式 基类public成员 基类protected成员 基类private成员
public继承 在派生类中保持public 在派生类中保持protected 不可访问
protected继承 在派生类中变为protected 在派生类中保持protected 不可访问
private继承 在派生类中变为private 在派生类中变为private 不可访问
4、举例说明
#include
using namespace std;
// 基类
class Base {
public:
int publicVar;
protected:
int protectedVar;
private:
int privateVar;
public:
Base() : publicVar(1), protectedVar(2), privateVar(3) {}
void show() {
cout << "Base: public=" << publicVar
<< ", protected=" << protectedVar
<< ", private=" << privateVar << endl;
}
};
// 1. public继承
class PublicDerived : public Base {
public:
void test() {
publicVar = 10; // 保持public
protectedVar = 20; // 保持protected
// privateVar = 30; // 不能访问
cout << “PublicDerived: publicVar=” << publicVar
<< “, protectedVar=” << protectedVar << endl;
}
};
// 2. protected继承
class ProtectedDerived : protected Base {
public:
void test() {
publicVar = 100; // 变为protected
protectedVar = 200; // 保持protected
// privateVar = 300; // 不能访问
cout << “ProtectedDerived: publicVar=” << publicVar
<< “, protectedVar=” << protectedVar << endl;
}
// 可以使用using重新公开基类成员
using Base::show;
using Base::publicVar; // 将publicVar重新公开
};
// 3. private继承
class PrivateDerived : private Base {
public:
void test() {
publicVar = 1000; // 变为private
protectedVar = 2000; // 变为private
// privateVar = 3000; // 不能访问
cout << “PrivateDerived: publicVar=” << publicVar
<< “, protectedVar=” << protectedVar << endl;
}
using Base::show;
using Base::publicVar;
};
void testInheritanceTypes() {
PublicDerived pubDerived;
cout << "PublicDerived: " << pubDerived.publicVar << endl; // 可访问
pubDerived.show(); // 可访问
pubDerived.test();
ProtectedDerived protDerived;
// cout << protDerived.publicVar << endl; // 不能直接访问
protDerived.show(); // using使其可访问
protDerived.test();
PrivateDerived privDerived;
// cout << privDerived.publicVar << endl; // 不能直接访问
privDerived.show(); // using使其可访问
privDerived.test();
}
int main() {
testInheritanceTypes();
return 0;
}
3048

被折叠的 条评论
为什么被折叠?



