(二十五)C++篇-面向对象编程(一)

(1)virtual保留字只在类内部的成员函数声明中出现,不能用在类定义体外部出现的函数定义上。基类通常将派生类需要重定义的任意函数定义为虚函数。

(2)protected 成员可以被派生类对象访问但不能被该类型的普通用户访问。

(3)如果没有继承,类只有两种用户:类本身的成员和该类的用户。将类划分为 private 和 public 访问级别反映了用户种类的这一分隔: 用户只能访问 public 接口,类成员和友元既可以访问 public 成员也可以访问 private 成员。

有了继承,就有了类的第三种用户:从类派生定义新类的程序员。派生类的提供者通常(但并不总是)需要访问(一般为 private 的)基类实现,为了允许这种访问而仍然禁止对实现的一般访问,提供了附加的protected 访问标号。类的 protected 部分仍然不能被一般程序访问,但可以被派生类访问。只有类本身和友元可以访问基类的 private 部分,派生类不能访问基类的 private 成员。

(4)每个派生类对象包含两个部分:从基类继承的成员和自己定义的成员。一般而言,派生类只(重)定义那些与基类不同或扩展基类行为的方面。

(5)派生类一般会重定义所继承的虚函数。派生类没有重定义某个虚函数,则使用基类中定义的版本。

(6)派生类中虚函数的声明必须与基类中的定义方式完全匹配,但有一个例外:返回对基类型的引用(或指针)的虚函数。派生类中的虚函数可以返回基类函数所返回类型的派生类的引用(或指针)。
Item_base 类可以定义返回 Item_base* 的虚函数,如果这样,Bulk_item 类中定义的实例可以定义为返回 Item_base* 或 Bulk_item*。

(7)C++ 中的函数调用默认不使用动态绑定。要触发动态绑定,满足两个条件:第一,只有指定为虚函数的成员函数才能进行动态绑定,成员函数默认为非虚函数,非虚函数不进行动态绑定;第二,必须通过基类类型的引用或指针进行函数调用。

#include 
#include 

using namespace std;

class Base
{
public:
     int count;     
};

class Book:public Base
{
public:
    int book_count;
};

int main(void)
{
    Base a;
    a.count = 10;
    
    Book b;
    b.count =15; 
    b.book_count =20;
    
    Base *p = &a;
    cout<count<count<book_count<

输出结果:

tekken@tekken:~/C++WS$ ./a.out 
10
15

你可能感兴趣的:((二十五)C++篇-面向对象编程(一))