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;
}
输出结果为: