21xrx.com
2024-11-22 13:40:10 Friday
登录
文章检索 我的文章 写文章
C++模板和多态
2023-07-04 19:54:30 深夜i     --     --
C++ 模板 多态 类型参数化 继承

在C++中,模板和多态是两个非常重要的概念。模板是一种C++语言中的高级技术,它能够通过一种通用的方法来处理多个不同类型的数据。模板的出现使得C++语言更加灵活,能够适应不同的数据类型和需求。多态则是一种面向对象的编程概念,在C++中通过虚函数和继承来实现。多态可以使得程序针对不同的对象表现出不同的行为和特征,从而增强了程序的可扩展性和灵活性。

模板和多态在C++中的应用非常广泛,下面将分别从模板和多态两个方面来介绍它们的使用。

首先来介绍模板。C++中的模板可以分为函数模板和类模板两种。函数模板可以处理多个不同类型的函数,通过在函数声明之前加上template 来声明模板,并在函数声明和定义中使用T作为模板参数,从而能够处理不同类型的数据。例如:


template<class T>

T max(T a, T b) {

  return (a>b) ? a : b;

}

可以处理不同类型的数据,例如int、double、float等。

类模板也是类似的,可以用于处理多种不同类型的数据。例如:


template<class T>

class MyStack {

private:

  vector<T> elements;

public:

  void push(T const&);

  void pop();

  T top() const;

  bool empty() const {

    return elements.empty();

  }

};

这个类模板可以用于实现一个栈,存放任意类型的数据。

接下来介绍多态。多态通过虚函数和继承来实现,其中虚函数是指一个可以在派生类中重新定义的函数。例如:


class Animal {

public:

  virtual void makeSound()

    cout << "Animal is making sound" << endl;

  

};

class Cat : public Animal {

public:

  void makeSound()

    cout << "Meow" << endl;

  

};

class Dog : public Animal {

public:

  void makeSound()

    cout << "Bark" << endl;

  

};

这里定义了一个基类Animal和两个继承自Animal的派生类Cat和Dog。Animal类中的makeSound()函数被声明为虚函数,表示它可以在派生类中重新定义。而Cat和Dog类中分别重新定义了makeSound()函数,从而使它们表现出不同的特征。

通过使用多态,可以使得程序更加灵活和可扩展。比如我们可以定义一个指向基类Animal的指针,然后将它指向派生类Cat或Dog的对象。然后调用makeSound()函数时,程序会根据对象的实际类型来执行相应的函数,从而获得不同的结果。

综上所述,C++中的模板和多态是两个非常重要的概念。它们分别从不同的角度扩展了C++语言的功能,使得C++程序更加灵活和可扩展。当我们在设计和编写C++程序时,需要充分发挥模板和多态的作用,从而满足不同的需求,实现更加强大和高效的程序。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复