- 浏览: 439244 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
su6838354:
我有点疑问啊,thread1中的i自增的慢的话,thread2 ...
浅析pthread_cond_wait -
zeronever:
请问pthread_cond_signal有解锁操纵吗?我在p ...
浅析pthread_cond_wait -
paladin1988:
你这帖子真心不错。。
浅谈bitmap算法 -
parabellum_sky:
昨天还有个姑娘让我去考我说会考虑
个人日志
C++ 继承
如何设计C++的类?子类和基类之间的关系?子类默认构造函数的初始化列表,多态性,虚构函数的应用?
//Object-Oriented #include<iostream> #include <string> using namespace std; class LibMat { public: LibMat(){cout << "LibMat::LibMat default constructor!\n";} virtual ~LibMat(){cout << "LibMat::~LibMat destructor!\n";} virtual void print ()const { cout << "LibMat::print() -- I am a LibMat object! \n"; } }; class Book : public LibMat { public: Book(const string &title,const string &author):_title(title),_author(author) { cout<< "Book::Book (" << _title << "," << _author << ") constructor\n"; } virtual ~Book(){cout<< "Book::~Book destructor\n";} void print ()const { cout << "Book::print() -- I am a Book object! \n"; cout << "My title is : " << _title << endl; cout << "My author is : "<< _author << endl; } const string & title(){return _title;} const string &author(){return _author;} protected: string _title; string _author; }; class AudioBook : public Book { public: AudioBook(const string &title,const string &author,const string &narrator):Book(title,author),_narrator(narrator) { cout<< "AudioBook::AudioBook (" << _title << "," << _author << "," << _narrator << ") constructor\n"; } ~AudioBook(){cout<< "AudioBook::~AudioBook destructor\n";} void print ()const { cout << "AudioBook::print() -- I am a AudioBook object! \n"; cout << "My title is : " << _title << endl; cout << "My author is : "<< _author << endl; cout << "My narrator is : "<< _narrator << endl; } const string & narrator() const {return _narrator;} //这里两个const,为何两个,用一个可以吗?当语句为string & narrator() const {return _narrator;}时,会提示编译错误,为何?return是const 而接收的却不是const,接收和返回的类型不匹配。 //为何要用两个const:简单的说为了防止改变私有成员的值。 private: string _narrator; }; void print(const AudioBook & audiobook) { cout << "in gobal print(): about to print mat.print()\n"; audiobook.print(); } int main() { AudioBook ab("Mason and Dixon","Thomas Pynchon","Edwin Leonard"); print(ab); //ab.narrator() = "hewei"; //cout <<"\n\n"; //print(ab); }
上述代码的输出:
LibMat::LibMat default constructor!
Book::Book (Mason and Dixon,Thomas Pynchon) constructor
AudioBook::AudioBook (Mason and Dixon,Thomas Pynchon,Edwin Leonard) constructor
in gobal print(): about to print mat.print()
AudioBook::print() -- I am a AudioBook object!
My title is : Mason and Dixon
My author is : Thomas Pynchon
My narrator is : Edwin Leonard
AudioBook::~AudioBook destructor
Book::~Book destructor
LibMat::~LibMat destructor!
构造函数的调用顺序:在使用AudioBook的时候,会最先初始化基类的基类LibMat,调用它的构造函数,然后再初始化基类Book,最后在调用AudioBook的构造函数。
析构函数的调用顺序:和构造函数的调用顺序是相反的。
构造函数初始化列表:首先初始化最底层的基类,依次初始化。
多态性:子类为了实现自己独特的功能而屏蔽掉基类的功能,用virtual作为关键词修饰,类的每一个对象都与一个虚函数列表,程序在编译阶段并不会指定要调用哪个函数,只有在运行时通过查找各个虚函数类表,找出对应的函数。
比如上面的代码,AudioBook的函数print,当程序调用print时,会先查找ab对象的函数列表,发现Book 和 LibMat的print函数均是虚函数,则会调用ab自己的print函数。
发表评论
-
Google编程风格
2012-04-01 17:05 1119Google编程风格(自己整 ... -
VS2008快捷键的设置
2012-02-02 13:43 2668VS2008快捷键的设置 VS2008默认的快捷键和VC++ ... -
LINK : fatal error LNK1000: Internal error during IncrBuildImage
2011-12-16 17:07 1237Win7安vc2008编译报LINK : fatal erro ... -
volatile关键字(摘自:百度百科)
2011-12-16 14:59 738volatile关键字[align=center][/alig ... -
InterlockedIncrement
2011-12-16 14:44 2199InterlockedIncrement[align=cent ... -
关键词explicit
2011-12-10 20:32 862关键词explicit[size=large][/size][ ... -
Souce Insight 设置
2011-12-09 17:16 2000Souce Insight 设置 【问题】 Source I ... -
VS2008下Boost库的安装编译下载boost库
2011-11-09 19:19 2072下载boost库 (最好去官网下,一般有SGI(GCC+用的较 ... -
C++多态技术的实现和反思(转)
2011-10-17 17:05 818面向对象技术最早出现于1960年代的Simula 67系统,并 ... -
memmove and memcpy
2011-07-31 13:11 1201memmove and memcpy 字符串的拷贝函数mem ... -
Polymorphism & Virtual Function
2011-07-25 21:38 861Polymorphism & Virtual Func ... -
C++ 不要重新定义继承的非虚函数
2011-07-18 14:15 1311不要重新定义继承的非虚函数 如果基类和派生类有相同的非虚函数 ... -
C++ 虚函数表解析
2011-07-14 21:02 986C++ 虚函数表解析 为什么在C++机制里要有虚函数表?虚函 ... -
C++ 默认构造函数
2011-07-14 11:39 3735C++ 默认构造函数 一直 ... -
尽量使用const
2011-07-12 10:51 1118尽可能的使用const const: ... -
Operator=
2011-07-11 21:54 947Operator= 赋值构造函数 ... -
虚析构函数
2011-07-11 10:43 1176虚析构函数 一 、为何要单独讨论虚析构函数?虚函数在类中到底 ... -
初始化列表和声明顺序之间的关系
2011-07-11 09:18 1472初始化列表和声明的顺序之间的关系 类中数据成员的声明顺序和初 ... -
初始化函数列表和构造函数内赋值之区别
2011-07-10 17:05 4520初始化函数列表和构造 ... -
传值和传引用的区别
2011-07-10 15:30 2392传值和传引用的区别 在C语言中,大都是通过值传递,C++也是 ...
相关推荐
### C++继承与多态性实验报告知识点解析 #### 实验背景及目的 本实验旨在通过实际操作加深学生对C++面向对象编程的理解,特别是针对继承与多态性的概念进行深入学习。实验要求学生能够利用C++语言特性,设计并实现...
C++继承是面向对象编程(OOP)中的一个核心概念,它允许一个类(子类或派生类)从另一个类(基类或父类)继承特性,从而实现代码的重用和扩展。在Qt框架中,C++的继承机制同样被广泛应用,以构建丰富的用户界面和...
### C++继承与派生机制详解 #### 一、引言 C++ 是一种支持面向对象编程的语言,其中继承机制是其重要的特性之一。通过继承,可以创建一个新类(称为派生类或子类),它继承了现有类(称为基类或父类)的所有属性和...
《C++继承与派生课件》 C++作为一门强大的面向对象编程语言,其核心概念之一就是继承与派生。这两个概念是实现代码复用和构建复杂对象模型的关键技术。继承允许创建一个新的类(派生类),它不仅包含原有类(基类)...
### C++继承中的内存布局详解 #### 1. 类如何布局? 在C++中,类的内存布局受到多个因素的影响,包括成员变量的类型、成员函数的存在与否、继承类型(如单继承、多重继承或虚继承)等。下面分别探讨不同情况下的类...
C++继承是面向对象编程(OOP)中的一个核心概念,它允许我们创建新的类,这些新类可以扩展已存在的类的功能。在这个“c++继承分类”主题中,我们将深入探讨C++中的继承机制,以及如何在Qt环境中利用这一特性进行开发...
08_31_C++ 继承的二义性08_31_C++ 继承的二义性08_31_C++ 继承的二义性08_31_C++ 继承的二义性08_31_C++ 继承的二义性08_31_C++ 继承的二义性08_31_C++ 继承的二义性08_31_C++ 继承的二义性08_31_C++ 继承的二义性08...
c++继承中的三种访问权限 pdf,一个简单总结,方便查阅。
c++继承与派生习题答案 c++继承是面向对象编程(OOP)的一个基本概念,它允许一个类继承另一个类的成员变量和成员函数,从而实现代码的重用和继承。以下是c++继承与派生习题的答案: 1.概念填空题 1.1 三种派生...
C++继承与派生 本节课程主要介绍C++中继承与派生的概念和使用方法,包括公有继承、私有继承和保护继承等不同的继承方式。通过实验和实践,掌握继承与派生的基本概念和使用方法。 继承的概念 继承是面向对象编程中...
C++继承与派生类是面向对象编程的重要概念,它们允许我们创建新的类,这些类可以从现有的类(称为基类或父类)继承属性和行为。在这个实验中,我们将深入理解这两个概念,并通过实际编程练习来巩固它们。 一、继承...
c++继承描述
C++继承
C++继承是面向对象编程中的一个核心概念,它允许我们创建新的类,这些新类可以从已存在的类(称为基类或父类)中继承特性。继承的主要目的是代码重用和扩展,使得软件设计更加模块化,易于维护和升级。在这个"**C++...
入门基础实例 有关继承和派生的应用小程序 希望对大家有帮助
C++的继承与派生是面向对象编程的重要概念,允许类之间的层次结构和代码复用。通过公有、私有和保护继承,可以控制成员的访问权限。派生类继承基类的特性,并可以添加新的成员和功能,同时需要处理构造函数和析构...
利用C++中的继承与多态,实验构造函数的作用
学习C++类的继承与多态详细全面易于理解的资料,从百度文库免费资源中获取。
标题"**C++继承讲解和代码示例.rar**"表明这是一个关于C++继承的教程资源,包含文字解释和实际的代码示例,用于帮助学习者理解和掌握C++中的继承机制。 首先,我们需要了解继承的基本概念。在C++中,通过使用关键字...