以下用libmat、book做为测试
无virtual
析构函数此时无virtual
print此时无virtual
//libmat.h
#ifndef LIBMAT_H
#define LIBMAT_H
class LibMat
{
public:
LibMat();
~LibMat();
void print() const;
protected:
private:
};
#endif // LIBMAT_H
//libmat.cpp
#include "LibMat.h"
#include <iostream>
using namespace std;
LibMat::LibMat()
{
cout<<"LibMat::LibMat()\n";
}
LibMat::~LibMat()
{
cout<<"LibMat::LibMat()\n";
}
void LibMat::print() const
{
cout<<"LibMat::print() const\r\n";
}
调用
//main.cpp
#include <iostream>
#include <LibMat.h>
using namespace std;
void print(const LibMat &rhs)
{
cout<<"main print \r\n";
rhs.print();
}
int main()
{
LibMat libmat;
print(libmat);
return 0;
}
新建一个book类,继承于libmat
//.h
class Book :public LibMat
{
public:
Book(const string &title, const string &author);
~Book();
void print() const;
const string& title() const {
return _title;}
const string& author() const {
return _author;}
protected:
string _title;
string _author;
};
//.cpp
Book::Book(const string &title, const string &author):_title(title),_author(author)
{
cout<<"Book::("<<title<<","<<author<<")\r\n";
}
Book::~Book()
{
cout<<"Book::~Book()";
}
void Book::print() const
{
cout<<"Book print\r\n"<<
"title is "<<_title<<"\n"<<
"author is "<<_author<<"\n";
}
调用
int main()
{
Book test("i love china","lin_xian_xing");
print(test);
return 0;
}
按照感觉上来说,这个print应该调用的时book的print,但是我会这样说,证明运行后的程序肯定不是这样
现在加上virtual看看
class LibMat{
.....
virtual ~LibMat();//virtual
virtual void print() const;
......
}
Book的print覆盖(override)LibMat的print