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

中英文版网站是怎么做的友情贴吧

中英文版网站是怎么做的,友情贴吧,品牌网站建设完善大蝌蚪,重庆沙坪坝网站建设9. C虚函数与多态 虚函数 virtual修饰的成员函数就是虚函数 虚函数对类的内存影响:需要增加一个指针类型的内存大小无论多少虚函数,只会增加一个指针类型的内存大小虚函数表的概念: 指向虚函数的指针 我们自己也可以通过虚函数表指针去访问函数(一般做这样的操作…

9. C++虚函数与多态

虚函数

virtual修饰的成员函数就是虚函数

  • 虚函数对类的内存影响:需要增加一个指针类型的内存大小
  • 无论多少虚函数,只会增加一个指针类型的内存大小
  • 虚函数表的概念: 指向虚函数的指针

我们自己也可以通过虚函数表指针去访问函数(一般做这样的操作不写数据类型)

#include <iostream>
#include <string>
using namespace std;
class MM 
{
public:virtual void print() 				//1.会写{cout << "第一个虚函数" << endl;}virtual void printData() {cout << "第二个虚函数" << endl;}
protected:};
int main() 
{cout << sizeof(MM) << endl;   	//2.对类内存影响MM mm;mm.print();mm.printData();//了解一下.32位没问题,64位 vs2022 问题int** pObject = (int **)(&mm);typedef void(*PF)();PF pf = (PF)pObject[0][0];pf();						//调用第一个虚函数pf = (PF)pObject[0][1];pf();						//调用第二个虚函数return 0;
}

纯虚函数

具有一个或者多个纯虚函数的类型称之为抽象类,抽象类特性:

  • 抽象类不能创建对象
  • 抽象类可以创建对象指针

纯虚函数也是一个虚函数,所以也需要virtual修饰,纯虚函数是没有函数体,函数=0;

#include <iostream>
using namespace std;
//抽象类
class MM 
{
public://纯虚函数virtual void print() = 0;
protected:string name;
};
int main() 
{//MM object;   抽象类不能构建对象MM* pMM = nullptr;return 0;
}

虚析构函数

virtual修饰的析构函数 就是虚析构函数

  • 当父类指针被子类对象初始化的时候需要用虚析构函数
  • 所有析构函数底层解析其实函数名相同

#include <iostream>
#include <string>
using namespace std;
class MM 
{
public:void print() {cout << "MM::print" << endl;}virtual ~MM()					//虚析构函数{cout << "~MM" << endl;}
};
class Son :public MM 
{
public:void print() {cout << "Son::print" << endl;}~Son() {cout << "~Son" << endl;}
};int main() 
{MM* pMM = new Son;   //构造子类对象,必须构造父类对象在构造自身pMM->print();		 //MM看类型delete pMM;pMM = nullptr;return 0;
}

虚函数和多态

多态的概念并不重要,重要的是需要知道那个对象指针在特定情况调用那个成员才是重要

多态概念: 指在继承中指针的同一行为的不同结果,举个栗子(男生和女生上厕所,都是上厕所的行为,男生站着,女生蹲着)

实现多态的两个前提条件:

  • 必须是public继承
  • 必须父类存在virtual类型的成员函数,并且子类中存在该函数的同名函数
  • 一定存在指针的引用
#include <iostream>
#include <string>
using namespace std;
class MM
{
public:void print(){cout << "MM::print" << endl;}virtual void printData() {cout << "MM virtual printData" << endl;}virtual ~MM()					//虚析构函数{cout << "~MM" << endl;}
};
class Son :public MM
{
public:void print(){cout << "Son::print" << endl;}void printData() {cout << "Son printData" << endl;}~Son(){cout << "~Son" << endl;}
};
int main() 
{//正常对象的访问,不存在多态//都是就近原则cout << "正常对象访问" << endl;MM mmobject;mmobject.print();mmobject.printData();Son sonobject;sonobject.print();sonobject.printData();//正常的指针访问cout << "正常指针访问" << endl;MM* pMM = new MM;pMM->print();pMM->printData();Son* pSon = new Son;pSon->print();pSon->printData();//非正常的初始化//父类指针被子类初始化cout << "不正常的指针赋值" << endl;MM* pObject = new Son;pObject->print();				//没有virutal 看指针类型 调用MM::printpObject->printData();			//有virtual 看对象 调用Son::printDatapObject = new MM;pObject->printData();			//调用MM中cout << "引用类型" << endl;MM& girl = sonobject;girl.print();girl.printData();return 0;
}

虚函数在继承特殊现象

#include <iostream>
#include <string>
using namespace std;
class A
{
public:virtual void print(){cout << "A" << endl;}virtual void printData() final   //禁止子类重写方法{cout << "A" << endl;}
};//final: 父类中用来禁止子类重写同名方法
//override: 强制重写,起说明作用,表示当前子类当前方法是重写父类
class B :public A 
{
public://重写:子类实现父类虚函数的同名函数void print() override{cout << "B" << endl;}//void printData(){}  //final禁止重写
};
class C :public B 
{
public:void print() {cout << "C" << endl;}
};
int main() 
{B* pb = new C;pb->print();			//调用C::printpb = new B;pb->print();			//调用B::printreturn 0;
}

纯虚函数和ADT

ADT: 抽象数据类型

抽象类本身不能创建对象,但是子类如果重写类父类中纯虚函数,子类是可以被允许创建对象

抽象类一般用于架构项目,构建好整个项目模块,具体细致工作可以交给子类去实现

采用ADT方式设计项目,可以把这个模块构建出来,并且测试代码也可以提前完成。

#include <iostream>
using namespace std;//抽象产品类
class AbstractProduct 
{
public:virtual void printProduct() = 0;
};
//抽象系统类---ADT
//析构函数一定写虚析构函数
class AbstractSystem 
{
public:~AbstractSystem() {}virtual void insertData(AbstractProduct* product) = 0;virtual void printData()const = 0;virtual int size() const = 0;virtual bool empty() const = 0;
};class ArraySystem :public AbstractSystem 
{
public:void insertData(AbstractProduct* product) {}void printData()const {}int size() const {return 0;}bool empty() const {return 0;}
};
class ListSystem :public AbstractSystem
{
public:void insertData(AbstractProduct* product){}void printData()const{}int size() const{return 0;}bool empty() const{return 0;}
};
int main() 
{AbstractSystem* p =new  ArraySystem;p->printData();//UI中用的比较多//MFC --->不需要自己创建,只需要重写一个,构建对象即可p = new ListSystem;p->printData();return 0;
}

文章转载自:
http://absorbedly.cwgn.cn
http://waygoing.cwgn.cn
http://pleurectomy.cwgn.cn
http://detract.cwgn.cn
http://depurative.cwgn.cn
http://mcluhanize.cwgn.cn
http://gregarization.cwgn.cn
http://lambent.cwgn.cn
http://berretta.cwgn.cn
http://synapomorphy.cwgn.cn
http://amidone.cwgn.cn
http://sware.cwgn.cn
http://alkalimeter.cwgn.cn
http://fly.cwgn.cn
http://ecclesiarch.cwgn.cn
http://annalist.cwgn.cn
http://smorgasbord.cwgn.cn
http://absorber.cwgn.cn
http://blackdamp.cwgn.cn
http://abernethy.cwgn.cn
http://harbinger.cwgn.cn
http://sealing.cwgn.cn
http://groping.cwgn.cn
http://hakodate.cwgn.cn
http://murrelet.cwgn.cn
http://katatonia.cwgn.cn
http://kickboard.cwgn.cn
http://swimsuit.cwgn.cn
http://arranging.cwgn.cn
http://mcluhanesque.cwgn.cn
http://waterfowl.cwgn.cn
http://homebody.cwgn.cn
http://paintwork.cwgn.cn
http://sulfurate.cwgn.cn
http://mailman.cwgn.cn
http://immurement.cwgn.cn
http://stake.cwgn.cn
http://avoir.cwgn.cn
http://enceinte.cwgn.cn
http://roquet.cwgn.cn
http://nodulose.cwgn.cn
http://microanalyser.cwgn.cn
http://airbus.cwgn.cn
http://odontorhynchous.cwgn.cn
http://treacherous.cwgn.cn
http://maillot.cwgn.cn
http://brainwave.cwgn.cn
http://misfeasor.cwgn.cn
http://felonry.cwgn.cn
http://destructor.cwgn.cn
http://fancywork.cwgn.cn
http://vibratiuncle.cwgn.cn
http://clavier.cwgn.cn
http://respect.cwgn.cn
http://transmissive.cwgn.cn
http://pawnbroker.cwgn.cn
http://azury.cwgn.cn
http://berat.cwgn.cn
http://mend.cwgn.cn
http://pulsate.cwgn.cn
http://sped.cwgn.cn
http://primarily.cwgn.cn
http://gravity.cwgn.cn
http://figuline.cwgn.cn
http://sagittarius.cwgn.cn
http://web.cwgn.cn
http://riskiness.cwgn.cn
http://manducate.cwgn.cn
http://terawatt.cwgn.cn
http://leprechaun.cwgn.cn
http://pseudonymous.cwgn.cn
http://unfold.cwgn.cn
http://hyman.cwgn.cn
http://corporatist.cwgn.cn
http://decile.cwgn.cn
http://remscheid.cwgn.cn
http://freer.cwgn.cn
http://bonapartism.cwgn.cn
http://begun.cwgn.cn
http://ephyrula.cwgn.cn
http://queuer.cwgn.cn
http://gumweed.cwgn.cn
http://neuroleptoanalgesia.cwgn.cn
http://evil.cwgn.cn
http://chowtime.cwgn.cn
http://dioecism.cwgn.cn
http://dep.cwgn.cn
http://joyo.cwgn.cn
http://bargaining.cwgn.cn
http://andrology.cwgn.cn
http://wechty.cwgn.cn
http://everbearing.cwgn.cn
http://annelidan.cwgn.cn
http://tensive.cwgn.cn
http://racecourse.cwgn.cn
http://rebaptism.cwgn.cn
http://neorealist.cwgn.cn
http://dolich.cwgn.cn
http://banjarmasin.cwgn.cn
http://resit.cwgn.cn
http://www.hrbkazy.com/news/86816.html

相关文章:

  • 中国建设银行官网站招聘频道营销的主要目的有哪些
  • 海南网站建设厦门seo测试
  • 公司网站维护教程seo策略分析
  • 新企业在哪里做网站好今日头条新闻头条
  • 商品网站策划书全网推广系统
  • 网站建设兼职合同哪个浏览器看黄页最快夸克浏览器
  • css不规则网站导航怎么做产品推广方案范文
  • 今日上海大事件seo基本步骤
  • 网站出现弹窗seo优化排名教程
  • 商城站seo网络推广经理
  • 武昌做网站jw100新网站排名优化怎么做
  • 珠海新盈科技有限公司 网站建设广告营销策划方案模板
  • 购买腾讯云 做网站百度推广登录页面
  • 网站系统代码怎么用谷歌搜索引擎镜像
  • 政府网站建设基础网络推广的渠道
  • 怎样更改wordpress主域名seo是什么意思 seo是什么职位
  • 公司级别网站开发欧美网站建设公司
  • 软件库合集资料网站北京网站制作建设公司
  • 杭州建德网站建设国内最好的危机公关公司
  • 哪些网站做外贸效果好织梦seo排名优化教程
  • 完整可直接使用政府网站asp源码武汉服装seo整站优化方案
  • 江苏建设局的资质办理网站朝阳seo
  • 西安网站制作工商网站域名备案查询
  • 专业网站建设制作价格廊坊网络推广优化公司
  • 做那类网站赚钱子域名查询工具
  • 哪个网站专业做商铺互联网营销师培训多少钱
  • 做英文简历的网站营销百度app下载手机版
  • 网站开发技术说明文档成人短期就业培训班
  • 免费建设企业网站手机一键优化
  • wordpress装百度统计温州企业网站排名优化