频道栏目
首页 > 程序开发 > 软件开发 > C++ > 正文
C++面向对象程序设计详情
2018-02-09 11:15:43      个评论    来源:jiejingguo的博客  
收藏   我要投稿

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++四个强制转换实例讲解
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站