#学习自用#
纯虚函数
在基类中定义一个没有实现的函数,然后强制子类去实现该函数。纯虚函数是虚函数=0的形式创建。
#include<iostream>
#include<string>
using namespace std;
class entity
{
public:
virtual string getname()=0;
};
class player:public entity
{
private:
string m_name;
public:
player(const string& name)
{
m_name=name;
}
string getname()override
{
return m_name;
}
};
void main()
{
entity* e=new player("lee") ;
cout<<e->getname()<<endl;
cin.get();
}
这里需要注意几点:1)无法创建有纯虚函数的实例,所以new 后面只能是entity的子类player。2)如果注释掉子类的getname函数,子类实例也无法创建,说明只能实现纯虚函数之后才能实例化。(与虚函数不同,就算重载的函数被注释掉,基类与子类的实体依然可以创建。)
但是说实话,不太明白这样做有什么意义。
可见性
可见性会影响变量的调用,c++中有三种基础的可见性修饰符public protected private。之前学习过在结构体中不声明可见性的默认为public,在类中不声明可见性的默认为private。private变量只能在定义内进行调用,也就是说在基类定义的private变量,不管是在main函数中还是在其子类中都无法调用。protected变量能在定义内以及其子类中进行调用,但在其他地方无法调用。public变量的调用则没有限制。