C++学习第15课,多态

1 多态是什么

多态指的是同样的方法,可以针对不同的参数,调用不同的函数。

之前的时候我们说过函数的覆写。

class Human{

public:

void ecting(void)

{

cout << "Human use hand"<

}

};

class Englishman : public Human{

public:

void ecting(void)

{

cout << "Englishman use Knife"<

}

};

class Chinese : public Human{

public:

void ecting(void)

{

 cout << "Chinese use chopsticks"<

 }

};
void text_ecting(Human &p)

{

p.ecting();

}

int main(int argc, char **argv)

{

Human h;

Englishman e;

Chinese c;

text_ecting(h);

text_ecting(e);

text_ecting(c);

return 0;

}

这里text_ecting(h);

text_ecting(e);

text_ecting(c);都是会调用基类的方法,因为text_ecting 的参数是Human

2 虚函数

virtual void ecting(void)

{

cout << "Human use hand"<

}

这里只要将基类的void ecting这个方法修改成virtual。

那这个方法就可以调用各自的void ecting方法了。

3 虚函数的原理

机制:静态联编,动态联编;

对于非虚函数,在编译时,就确定好了调用哪个函数;

对于类内有虚函数的,内部有一个指针,指向虚函数表;这个指针可以帮助我们调用对应的虚函数。

4 多态的规定

1 方法只有调用指针和应用才有多态。

如:text_func(Human *h);text_func(Human &h);可以多态;text_func(Human h);没有多态。

2 只有类的成员函数才可以声明为virtual。

3 静态成员函数不能是虚函数。

4 内联函数不能是虚函数。类内的函数,如果没有加上virtual,那默认是内联函数。

5 构造函数不能是虚函数。

6 析构函数一般都申明为虚函数。(析构,之前写错了。不好意思)

7重载:虚函数参数不同,不可以设置为虚函数;

覆盖:函数参数、返回值相同,可以设为虚函数。

8返回值例外,正常情况下返回值不同,不能设置为虚函数,不过如果返回值为单签对象的指针或应用时,可以设置为虚函数。


*注意

复习Human *h = new Human;可以调用delete 来删除;

且销毁时,先调用自身的析构函数,再调用父类的析构函数时

你可能感兴趣的:(C++学习第15课,多态)