C++面向对象编程:派生类与基类成员访问
需积分: 2 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`函数,而是隐藏了它的可见性。因此,尽管基类的成员可以被直接访问,但它们仍然属于基类的域,而不是派生类的。理解这一点对于正确地编写和使用派生类至关重要。
2010-09-25 上传
472 浏览量
2023-09-22 上传
2024-10-03 上传
2009-04-01 上传
ghoul411
- 粉丝: 1
- 资源: 12
最新资源
- giraphql:GiraphQL是用于使用强类型代码优先方法在打字稿中创建GraphQL模式的库
- opencv-python-4.x
- bayes
- cex-gen.rar_Windows编程_Unix_Linux_
- node-limbo-i18n:适用于Limbo应用程序的i18n库
- 最大化WPF窗口
- qxmpp:跨平台C ++ XMPP客户端和服务器库
- 元素:元素音频插件主机
- ProjetoTabela.rar_单片机开发_Visual_C++_
- Criacao:为UUNDC(联邦大学儿童教育中心儿童发展中心)制作的系统和数字媒体课程综合项目2015.1
- dotfiles:我的(Linux)点文件
- BatallaNaval
- 愿景:计算机视觉实践和探索计算机视觉的实践和探索
- netgear_cm700_status:Scrape DOCSIS状态页面
- upgrade_to_akka_typed
- Dragon Web Extension-crx插件