classA{public:voidPrint(){ cout <<"This is class A."<< endl;}// virtual void Print() { cout << "This is class A." << endl; }};classB:publicA{public:voidPrint(){ cout <<"This is class B."<< endl;}};intmain(){ A* pA =newB(); cout <<typeid(pA).name()<< endl;// class A * cout <<typeid(*pA).name()<< endl;// class A // 如果将 print 函数变成虚函数, 则输出class Breturn0;}
class C : public A
{
public:
void Print() { cout << "This is class C." << endl; }
};
void Handle(A* a)
{
if (typeid(*a) == typeid(A))
{
cout << "I am a A truly." << endl;
}
else if (typeid(*a) == typeid(B))
{
cout << "I am a B truly." << endl;
}
else if (typeid(*a) == typeid(C))
{
cout << "I am a C truly." << endl;
}
else
{
cout << "I am alone." << endl;
}
}
int main()
{
A* pA = new B();
Handle(pA); // I am a B truly.
delete pA;
pA = new C(); // I am a C truly.
Handle(pA);
return 0;
}
void Handle(A* a)
{
if (dynamic_cast<B*>(a))
{
cout << "I am a B truly." << endl;
}
else if (dynamic_cast<C*>(a))
{
cout << "I am a C truly." << endl;
}
else
{
cout << "I am alone." << endl;
}
}
class File
{
public:
virtual ~File() = 0; // 纯虚拟析构函数
virtual int open(const std::string& filename, std::fstream& f_io) = 0;
virtual int close(const std::string& filename, std::fstream& f_io) = 0;
virtual int write(const std::string& data, std::fstream f_io) = 0;
virtual int read(const std::string& buff, std::fstream f_io) = 0;
};
class DiskFile :public File
{
public:
int open(const std::string& filename, std::fstream& f_io) {}
int close(const std::string& filename, std::fstream& f_io) {}
int write(const std::string& data, std::fstream f_io) {}
int read(const std::string& buff, std::fstream f_io) {}
virtual int flush() {}
virtual int defragment() {}
};
class TextFile : public DiskFile
{
public:
int flush() {}
int defragment() {}
int sort_by_words() {}
};
class MediaFile : public DiskFile
{
public:
int flush() {}
int defragment() {}
int split() {}
};