面向对象编程(Object-oriented programming,OOP)

本文详细介绍了C++中的多态性和继承机制,包括虚函数的定义与使用、动态绑定的条件、不同访问级别的成员及派生类如何访问基类成员等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在C++中,基类必须指出希望派出类重定义哪些函数,定义为virtual的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数。

2、在C++中,通过基类的引用(或指针)调用虚函数时,发生动态绑定。引用(或指针)既可以指向基类对象也可以指向派生类对象。用引用(或指针)调用的虚函数在运行时确定,被调用的函数是引用(或指针)所指对象的实际类型所定义的。

3、保留字virtual的目的是启用动态绑定。除了构造函数之外,任意非static成员函数都可以是虚函数,保留字virtual只在类内部的成员函数声明中出现,不能用在类定义体外部出现的函数定义上。基类通常应将派生类需要重定义的任意函数定义为虚函数。一旦函数在基类中声明为虚函数,它就一直为虚函数,派生类无法改变该函数为虚函数这一事实。

4、受保护的访问标号:protected成员可以被派生类对象访问但不能被该类型的普通用户访问。

5、派生类只能通过派生类对象访问其基类的protected成员,派生类对其基类类型对象的protected成员没有特殊访问权限。只有类本身和友元可以访问基类的private部分,派生类不能访问基类的private成员。

6、为了定义派生类,使用类派生列表指定基类,类派生列表指定了一个或多个基类。
class classname::access-label base-class
如果需要声明(但并不定义)一个派生类,则声明包含类名但不包含派生列表。

7、要出发动态绑定,必须满足两个条件:
1)只有指定为虚函数的成员函数才能进行动态绑定。
2)必须通过基类类型的引用或指针进行函数调用。

8、C++中的多态性:如果调用非虚函数,则无论实际对象是什么类型,都执行基类类型所定义的函数。如果调用虚函数,则直到运行时才能确定调用哪个函数,运行的虚函数是引用所绑定的或指针所指向的对象所属类型定义的版本。非虚函数总是在编译时根据调用该函数的对象、引用或指针的类型而确定。

9、派生类虚函数调用基类版本时,必须显示使用作用域操作符。

10、虚函数也可以有默认实参。如果一个调用省略了具有默认值的实参,则所用的值由调用该函数的类型定义,与对象的动态类型无关。

11、无论派生列表中是什么访问标号,所有派生类对基类中的成员具有同样的访问。

12、如:class Derived:private Base{
            public:
                   using Base::size;
            protected:
                   using Base::n;
};
虽然是私有继承,但可以通过using声明,使size成员能都被用户访问,使n能够被从Derived派生的类访问。

13、友元关系不能继承。

14、如果基类定义了static成员,则整个继承层次中只有一个这样的成员。

15、派生类到基类的转换:如果有一个派生类型的对象,则可以使用它的地址对基类类型的指针进行赋值或初始化。也可以使用派生类型的引用或对象初始化基类类型的引用。对对象没有类似转换,编译器不会自动将派生类型对象转换为基类类型对象。一般可以使用派生类型对象对基类对象进行赋值或初始化。

16、如果类是使用private或protected继承派生的,则用户代码不能将派生类型对象转换为基类对象。如果是private继承,则从private继承类派生的类不能转换为基类。如果是protected继承,则后续派生类的成员可以转换为基类类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值