C++中的繼承與多態

C++中,多態性僅用於通過繼承而相關聯的類型的引用或指針,繼承一般使用非虛函數,多態一般使用虛函數

C++的函數調用默認不使用動態綁定,要觸發動態綁定,必須滿足兩個條件:

1. 只有指定爲虛函數的成員函數才能進行動態綁定,成員函數默認爲非虛函數,非虛函數不能進行動態綁定;

2. 必須通過基類類型的額引用或指針金鑫函數調用。

以上摘錄自:《C++ primer》

下面實際代碼如下:

//頭文件
#pragma once

class Base
{
public:
	Base(void);
	~Base(void);
	virtual void print();
	void name();
protected:
	int data;
};

//son1 繼承自Base類
class son1:public Base
{
public:
	son1 ();
    ~son1();
	void print();
	void name();
};
//Base.cpp 文件
#include "Base.h"
#include <iostream>

Base::Base(void):data(5)
{
}

Base::~Base(void)
{
}

void Base::print()
{
	std::cout<<"Base print"<<std::endl;
}

void Base::name()
{
 std::cout<<"My name is Base "<<std::endl;
}

//son1.cpp 文件

son1::son1()
{

}

son1::~son1()
{

}

void son1::print()
{
	std::cout<<"Son1 print"<<std::endl;
}

void son1::name()
{
 std::cout<<"My name is Son1 "<<std::endl;
}

// TemplatePattern.cpp : 定義控制檯應用程序的入口點。
//

#include "stdafx.h"
#include "Base.h"
void print_test(  Base& b)
{
 	b.name();
	b.print();
}

int _tmain(int argc, _TCHAR* argv[])
{
   Base b;
   son1 s1;
   print_test(s1);
   s1.name();
	return 0;
}

輸出結果爲:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章