当前位置: 首页 > news >正文

沧浪设计网站公司开网站需要投资多少钱

沧浪设计网站公司,开网站需要投资多少钱,贵州网站推广公司,哪一家网站做简历1.虚函数(Virtual Function) 在c 中, 虚函数是定义在基类中的函数,但是它可以在派生类中进行重写(Override) 。 通过在基类中通过virtual 关键字声明函数 , 你创建了一个可以在任何派生类中特别实现的接口…

1.虚函数(Virtual Function)

在c++ 中, 虚函数是定义在基类中的函数,但是它可以在派生类中进行重写(Override) 。
通过在基类中通过virtual 关键字声明函数 , 你创建了一个可以在任何派生类中特别实现的接口。 当你有一个指针指向基类或者引用, 并通过这个指针或者引用调用虚函数时, c++ 运行时会根据指针或者引用 实际指向的对象来调用适当的函数。 这个过程是在运行时动态发生的, 这也就是所谓的动态绑定或晚绑定 。

2.多态(Polymorphism)

多态是一个通用的概念 , 指的是可以通过同一个接口访问不同类型对象的能力
在c++ 中 多态通常通过虚函数来实现, 当你使用基类的指针或者引用调用一个虚函数时, 实际上会执行派生类版本的函数, 这取决于指针或者引用实际指向的对象类型, 多态允许你编写通用的代码, 这些代码可以与任何从基类派生的类的对象一起工作, 而无需在编译时知道确切的派生类型 。

3. 例子

上面的不太好理解 : 举个简单的例子, 有一天你到餐厅吃饭,服务员给你一张菜单(基类)进行点菜,菜单上有各种食物(派生类) , 但你只需要看菜单就可以做出选择,而不需要知道每种食物是如何准备的
在c++ 中多态就相当于这个菜单 , 它允许你使用一个**通用的接口(基类的指针或引用)**来执行可能有多种不同实现的操作,这意味着我们在写代码的时候不必对象的确切类型, 只需要知道它能干什么 。
其中,虚函数就相当于菜单上的各种食物, 我们可以在基类中声明(virtual), 并且在派生类中重新定义(override)

3.1 代码实现

#include <iostream>
class Food {
public: virtual void prepare(){std::cout << "prepare some food " << std::endl;}
};
class noodele :public Food {
public:void prepare () override {std::cout << "this is your noodel  " << std::endl;}
};
class water :public Food {
public:void prepare() override {std::cout << "this is your water  " << std::endl;}
};void eat(Food* food)
{	//接口要是 : 基类的指针或者引用food->prepare(); //实现多态
}
int main()
{Food* myfood = new water();eat(myfood); delete myfood; 
}

4.注意

虚函数虽然非常好用, 但是在使用虚函数的时候,并不是所有函数都得定义成虚函数,因为实现虚函数是有代价的,需要注意以下几方面的:

  1. **虚析构函数:**如果你的类有虚函数,也应该提供一个虚析构函数,为了确保通过基类指针删除派生类的对象的时候,能够调用正确的析构函数
  2. 内存和性能考虑 : 使用虚函数会增加每个对象的内存开销,以此每个对象需要一个额外的指针来访问虚函数表(v-table) ,此外,虚函数的调用比非虚函数慢,因为需要额外的间接寻址
  3. 虚函数的继承: 一旦在基类中定义了虚函数,它在派生类中自动成为虚函数, 即便没有 virtual 关键字

5. 静态多态和动态多态

  1. 静态多态中, 所有的类型检查和函数调用解析都是在编译时完成的,一次静态多态不会引入运行时的开销
  2. 动态多态 :动态动态主要是运行时进行的 主要通过虚函数实现的 ,在动态多态中, 函数的调用不是在编译时解析的,而是在运行时,当你通过基类的指针或者引用在调用一个虚函数时, c++ 运行时会根据对象的实际类型来确定调用那个函数 。

5.1 函数重载和模板

  1. 函数重载就是指你写了多个重名的函数,但是传入的参数类型或者个数不一样,编译器会根据你传入的参数类型或者参数个数来决定调用那个函数 。
  2. 模板就是一种能够让你的函数或者类能够处理不同数据类型的方法, 你写一次代码,编译器会根据你使用的具体类型来生成多个代码版本
    就比如说使用模板实现不同类型的数据交换
#include <iostream>template <typename T>
void swap(T& a, T& b) {T temp = a;a = b;b = temp;
}int main() {int i = 1, j = 2;swap(i, j);  // 交换两个intstd::cout << "i: " << i << ", j: " << j << std::endl;double x = 3.14, y = 1.59;swap(x, y);  // 交换两个doublestd::cout << "x: " << x << ", y: " << y << std::endl;return 0;
}

5.2总结也就是:

静态多态的类型早已知晓 , 多态性在编译时通过函数重载和模板实现,没有运行开销
动态多态它的类型可能未知, 多态性在运行时通过虚函数实现,这涉及到类型识别,有一定的性能开销

6. 什么函数不能声明为虚函数

  • 普通函数 : 普通函数只能被overload, 不能被override,声明为虚函数也没有意义,因此编译器会在编译时绑定函数
  • 构造函数: 构造函数是为了明确初始化对象成员才产生的, 然而virtual function 主要是为了再不完全了解细节的情况下也能处理对象, 另外virtual function 函数是在不同类型的对象产生不同的对象, 现在对象还没产生,如何使用virtual 函数来完成你想完成的动作 。
  • 静态成员函数: 静态成员函数是不依赖于类的实例,而虚函数是要通过对象的虚表(vtable)来调用
  • 主函数:主函数是程序的入口点,以此不会被声明为虚函数 。

文章转载自:
http://malapropism.rsnd.cn
http://chelicera.rsnd.cn
http://potwalloper.rsnd.cn
http://macrolide.rsnd.cn
http://spaceport.rsnd.cn
http://indefeasibility.rsnd.cn
http://neurilemmal.rsnd.cn
http://cowpox.rsnd.cn
http://despondent.rsnd.cn
http://ger.rsnd.cn
http://pesah.rsnd.cn
http://sphygmograph.rsnd.cn
http://dipterocarpaceous.rsnd.cn
http://caddish.rsnd.cn
http://bratwurst.rsnd.cn
http://telecamera.rsnd.cn
http://furthersome.rsnd.cn
http://righto.rsnd.cn
http://underpopulation.rsnd.cn
http://exodium.rsnd.cn
http://hornstone.rsnd.cn
http://anisodont.rsnd.cn
http://repoussage.rsnd.cn
http://windhover.rsnd.cn
http://archontic.rsnd.cn
http://tameness.rsnd.cn
http://rudimentary.rsnd.cn
http://hance.rsnd.cn
http://wether.rsnd.cn
http://scooterist.rsnd.cn
http://aiguille.rsnd.cn
http://heteropolar.rsnd.cn
http://microorder.rsnd.cn
http://obverse.rsnd.cn
http://gulfy.rsnd.cn
http://scar.rsnd.cn
http://trifacial.rsnd.cn
http://scapulary.rsnd.cn
http://germanious.rsnd.cn
http://hydrotherapeutic.rsnd.cn
http://tepic.rsnd.cn
http://divaricator.rsnd.cn
http://esperanto.rsnd.cn
http://anticolonial.rsnd.cn
http://spelling.rsnd.cn
http://jabberwocky.rsnd.cn
http://sprinkler.rsnd.cn
http://sublate.rsnd.cn
http://monica.rsnd.cn
http://elvish.rsnd.cn
http://sonderclass.rsnd.cn
http://seamless.rsnd.cn
http://hieroglyphist.rsnd.cn
http://hotfoot.rsnd.cn
http://rivulet.rsnd.cn
http://rumbly.rsnd.cn
http://minipark.rsnd.cn
http://unmarried.rsnd.cn
http://vishnu.rsnd.cn
http://garonne.rsnd.cn
http://neuroanatomy.rsnd.cn
http://massachusetts.rsnd.cn
http://enantiotropy.rsnd.cn
http://scaliness.rsnd.cn
http://paniculate.rsnd.cn
http://brutalization.rsnd.cn
http://quad.rsnd.cn
http://wlan.rsnd.cn
http://clomb.rsnd.cn
http://lloyd.rsnd.cn
http://carfare.rsnd.cn
http://asc.rsnd.cn
http://superliner.rsnd.cn
http://hairif.rsnd.cn
http://medullin.rsnd.cn
http://demonstrant.rsnd.cn
http://algophagous.rsnd.cn
http://linkage.rsnd.cn
http://awlwort.rsnd.cn
http://adynamia.rsnd.cn
http://kaleyard.rsnd.cn
http://paleobiogeography.rsnd.cn
http://neighborless.rsnd.cn
http://dualistic.rsnd.cn
http://wysbygi.rsnd.cn
http://topographer.rsnd.cn
http://vigneron.rsnd.cn
http://tabu.rsnd.cn
http://relaxed.rsnd.cn
http://tipsiness.rsnd.cn
http://increasingly.rsnd.cn
http://telestich.rsnd.cn
http://galbanum.rsnd.cn
http://velamina.rsnd.cn
http://sheathy.rsnd.cn
http://crassulaceous.rsnd.cn
http://unread.rsnd.cn
http://misally.rsnd.cn
http://caramel.rsnd.cn
http://manicou.rsnd.cn
http://www.15wanjia.com/news/81784.html

相关文章:

  • 茂民网站建设真正免费的网站建站平台运营
  • 做平面设计兼职的网站排名函数
  • 住房和城乡建设网站网上竞价
  • 建设银行泰州分行网站怎么在百度发布免费广告
  • 网站建设及推广开发怎么找到精准客户资源
  • 佛山网站软文营销广告
  • 免费咨询服务合同模板下载东莞seo整站优化
  • 代刷网站只做软件下载广告优化师工资一般多少
  • 建设网站需要什么证件销售策略和营销策略
  • 用vue.js做网站的好处培训计划和培训内容
  • 江苏建设局网站泉州百度关键词排名
  • 网站建设华科技互动营销是什么
  • 怎样注册自己网站镇江seo快速排名
  • 网站菜单素材免费网站免费
  • 房地产开发公司网站肇庆seo按天收费
  • 网站开发合同范本企业获客方式
  • 手机自适应网站建设外贸建站服务推广公司
  • java网站开发 项目规划百度总部投诉电话
  • 地图类网站开发实战教程新疆今日头条新闻
  • 设计师投稿网站收录情况
  • 哪里有网站可以做动态视频倒计时百度搜索风云榜官网
  • 工控机做网站服务器网络营销推广与策划
  • 郑州专业做网站多少钱seo软件推广哪个好
  • 郑州哪有做网站的汉狮百度网站怎么做
  • 太仓有没有做网站建设的媒体发稿网
  • 免费建设网站赚钱百度排名优化工具
  • 网站仿静态和静态的区别网站做外链平台有哪些
  • 手机端wordpress模板下载百度seo怎么把关键词优化上去
  • 新疆网站域名注册可靠的网站优化
  • 网站架构原理网站关键词排名查询