C++面向对象编程:派生类与基类成员访问

需积分: 2 0 下载量 20 浏览量 更新于2024-07-21 收藏 52KB DOCX 举报
"C++编程中的面向对象特性及基类成员访问" 在C++编程中,面向对象是一种重要的编程范式,它基于类和对象的概念,强调数据封装、继承和多态等核心特性。面向对象的设计允许开发者创建可重用的代码模块,提高软件的可维护性和扩展性。 面向对象设计包括类的定义和继承。类是对象的蓝图,它定义了一组属性(数据成员)和行为(成员函数)。继承则是允许一个类(派生类)从另一个类(基类)继承其属性和行为,从而实现代码的复用。在C++中,派生类可以从基类继承所有非私有成员,包括公有和保护成员。然而,需要注意的是,在派生表中指定的类必须先被定义,才能被用作基类。例如: ```cpp class Query; // 错误:Query必须首先被定义 class classNameQuery: public Query { ... }; ``` 前向声明在C++中用于告知编译器后续会有一个类的定义,但当前并不提供。对于派生类,前向声明只能包含类名,不能包含派生表,如: ```cpp // 错误:前向声明不能包含派生类的派生表 class classNameQuery: public Query; // 正确的前向声明 class Query; class classNameQuery; ``` 在派生类中,基类成员的访问遵循一定的规则。派生类对象包含了基类的子对象,这些子对象可以直接通过派生类对象访问。继承的基类成员函数也可以像派生类的成员函数一样调用。然而,如果基类和派生类中有同名成员,访问基类成员时需要使用作用域解析运算符(::)进行限定,例如: ```cpp class Di { protected: int mum; }; class Shy : public Di { protected: string mum; // 隐藏了Di::mum的可视性 }; void Shy::func() { mum = "Excuse"; // OK,访问派生类的mum Di::mum = -1; // OK,限定修饰基类的实例 } ``` 值得注意的是,基类和派生类的同名成员函数并不构成重载。例如: ```cpp class Diffident { public: void mumble(int); }; class Shy : public Diffident { public: void mumble(string); // 隐藏了Diffident::mumble的可视性 }; Shy sh; sh.mumble("excuse"); // OK,调用Shy::mumble(string) sh.mumble(2); // 错误,Diffident::mumble(int)不可见 ``` 在这个例子中,`Shy`类中的`mumble`函数并没有重载`Diffident`类的`mumble`函数,而是隐藏了它的可见性。因此,尽管基类的成员可以被直接访问,但它们仍然属于基类的域,而不是派生类的。理解这一点对于正确地编写和使用派生类至关重要。