C++学习笔记03之虚函数的声明和实现

标签: 面向对象编程 C++ 函数 继承 虚函数
270人阅读 评论(0) 收藏 举报
分类:

首先,OOP (面向对象编程)中,两个类之间的关系:
一、复合 Composition

二、委托 Delegation
Composition by reference
用指针相连

三、继承 Inheritance
virtual function 虚函数


现在,我写出虚函数的声明和实现,并用test程序测试。

        声明:

class Shape {
public:
	// 继承的三种方式(通过虚函数)
	virtual void draw() const = 0; // 1. pure virtual
	virtual void error(const std::string& msg); // 2. impure virtual
	int objectID() const; // 3. non-virtual
	...
}; 

class Rectangle: public Shape { ... };
class Ellipse: public Shape{ ... };       


        函数实现:

class CDocument
{
public:
	void OnFileOpen()
	{
	// 这是个算法,每个 cout 输出代表一个实际动作
	cout << "dialog..." << endl;
	cout << "check file status..." << endl;
	cout << "open file..." << endl;
	Serialize();
	cout << "close file..." << endl;
	cout << "update all views..." << endl;	
	}
	
	virtual void Serialize() { };
};

class CMyDoc : public CDocument
{
public:
	virtual void Serialize()
	{
		// 只有应用程序本身才知道如何读取自己的文件(格式)
		cout << "CMyDoc::Serialize()" << endl;
	}
};

        test程序:

int main()
{
	CMyDoc myDoc; // 假设对应[File/Open]
	myDoc.OnFileOpen();
        return 0;
}


查看评论

阳历到阴历的转换

在CSDN上见到不少有人问关于阴历的问题,我查了一下,文档中心还没有相关的文章,碰巧手头有一份资料,哪来的忘了,现在将全文贴出来,希望对大家有帮助。 - 90.电脑语言, C (90:90/1237)...
  • sxbyl
  • sxbyl
  • 2001-01-11 11:49:00
  • 2719

C++虚函数声明和定义以及g++编译遇到的一些问题

遇到了一些麻烦的,记录下来作为教训…..1. 虚函数的声明和定义具体关于虚函数的知识不做多讲,我在定义一个抽象类时,忘了将一个虚函数声明为 纯虚函数,又没有对其定义, 导致编译报错时报错如下:unde...
  • GVFDBDF
  • GVFDBDF
  • 2016-07-19 12:47:13
  • 2508

C++虚函数简单总结

函数简单学习记录
  • My_heart_
  • My_heart_
  • 2016-07-07 14:39:50
  • 414

C++之成员函数声明为虚函数的规则

虚函数 定义: 虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,是C++多态的一种表现。 作用: 实现动态联编,也就是在程序的运行阶段动态地...
  • gaoruxue918
  • gaoruxue918
  • 2017-03-20 00:15:26
  • 587

c++ 普通函数 虚函数 纯虚函数 代码例子

#include #include using namespace std; class Person { public: Person(const string& name, int a...
  • FengTwoYear
  • FengTwoYear
  • 2017-04-25 08:14:52
  • 863

C++多态性,虚函数,重载,抽象类

1,C++多态性,虚函数,重载,比较有意思,,,,,, 在面向对象的程序中,当不同的对象接受到相同的消息产生不同的动作,这种性质称为多态性。...
  • msdnwolaile
  • msdnwolaile
  • 2016-07-21 14:55:17
  • 1272

【C++拾遗】 C++虚函数实现原理

原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/50454819我们知道,与C语言相比,C++在布局和存取时间上的额外开销主要是由虚...
  • Xiejingfa
  • Xiejingfa
  • 2016-01-04 15:47:39
  • 2010

C++使用虚函数的时候,子类也要使用virtual关键字吗

父类使用虚函数是为了让子类重写,那子类重写的时候也需要带virtual关键字吗?比如: class Base{ virtual bool init(); }; class Derive...
  • gao1440156051
  • gao1440156051
  • 2015-05-12 15:57:07
  • 4166

C++虚函数的定义与意义

我们知道,在同一类中是不能定义两个名字相同、参数个数和类型都相同的函数的,否则就是“重复定义”。但是在类的继承层次结构中,在不同的层次中可以出现名字相同、参数个数和类型都相同而功能不同的函数。例如在例...
  • u011392772
  • u011392772
  • 2015-01-30 09:55:46
  • 1819

为什么构造函数不可以声明为虚函数,而析构函数最好声明为虚函数

为什么构造函数不可以被声明为虚函数: 1、因为创建一个对象时要确定对象的类型,而虚函数是在运行时确定其类型的, 2、虚函数对应一个虚表,可是这个虚表其实是存储在对象的内存空间的。如果构造函数是虚的,就...
  • Better_JH
  • Better_JH
  • 2016-11-11 23:04:42
  • 296
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 5万+
    积分: 1629
    排名: 3万+
    博客专栏
    最新评论