设为首页 加入收藏

TOP

C++面向对象程序设计详情
2018-02-13 12:56:09 】 浏览:172
Tags:面向 对象 程序设计 详情

C++面向对象程序设计

C++语言中,当我们使用基类的引用或指针调用一个虚函数时将发生动态绑定,即JAVA中的多态 基类通常要定义一个虚析构函数,即使该函数不执行任何实际操作,也是如此。 在C++中基类的成员函数有两种:1、基类希望派生类进行重写的函数;2、基类希望派生类直接继承而不用改变的函数。对于前者,基类将其定义为虚函数。当指针或引用调用虚函数时,该调用将被动态绑定(即多态)。 任何构造函数之外的非static函数都可以是虚函数。关键字virtual只能出现在类内部的函数声明语句之前,而不能出现在类外部的函数定义语句之前。如果基类把一个函数声明成虚函数,则该函数在派生类中隐式地也是虚函数。 如果成员函数没有被声明成虚函数,则其解析过程发生在编译时而非运行时。所以在继承层次中,该函数只有一个,不能被重写成多个版本。 派生类必须重新声明基类中所有的虚函数。派生类可以在这样的函数前加上关键字virtual,但并非非得这样做。 如果派生列表中基类的访问控制符为public,我们可以将派生类型的对象绑定到基类的引用或指针上。 派生类虽然有基类的数据成员,但是也只能通过基类的构造函数来初始化它们。
class A {
    public:
        int a;
        A(int p):a(p) {}
}

class B : public A {
    public:
        int b;
        B(int p1, int p2):A(p1), b(p2) {}
}

//B的构造函数先由A的构造函数初始化a,然后执行A的构造函数体,接着初始化b,最后执行B的构造函数体
//派生类声明时,声明中包含类名但是不包含它的派生列表
class B : public A;//错误
class B;//正确
如果某个类被当作基类,则该类必须被定义,而不能仅仅被声明。
class A; //仅仅声明了A类
class B : public A {
    ...
} //错误,A类必须被定义
从派生类向基类的类型转换只对指针或引用类型有效 基类向派生类不存在隐式的类型转换 当我们用一个派生类对象为一个基类对象初始化或赋值时,只有该派生类对象中基类的部分会被拷贝、移动、赋值,它的派生类部分将被忽略掉。所以得到的基类对象无法强制转换成派生类对象。
class A {}
class B : public A {}
B b;
A a(b);//实际上,调用的是拷贝构造函数,即A::A(const A&)
a = b;//实际上,调用的是拷贝赋值运算符,即A::operator=(const A&)
列表内容 
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++ 虚基类和抽象类关系讲解 下一篇C++ vector::erase和无参构造函数..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目