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

做网站公司(信科网络)上海网络推广专员

做网站公司(信科网络),上海网络推广专员,做网站开发需要学什么,中国纪检监察报刘一霖一、前言 在C中,接口指针或类对象的函数参数传递是一个常见的做法,特别是在需要支持多态或动态绑定时。这里将介绍如何传递接口指针或类对象作为函数参数。 二、函数参数传递的几种类型 抽象类(接口)的实例只能通过指针或引用传…

一、前言

在C++中,接口指针或类对象的函数参数传递是一个常见的做法,特别是在需要支持多态或动态绑定时。这里将介绍如何传递接口指针或类对象作为函数参数。

二、函数参数传递的几种类型

抽象类(接口)的实例只能通过指针或引用传递,不能作为值传递。具体类的实例可以通过指针、值或引用传递。指针传递和值传递都会创建对象的副本,而引用传递会直接操作原始对象。

示例代码:

#include <iostream>
// 定义一个接口类
class IMyInterface {
public:virtual void myMethod() = 0; // 纯虚函数,必须被实现
};
// 定义一个类,它实现了IMyInterface接口
class MyClass : public IMyInterface 
{
public:void myMethod() override {std::cout << "MyClass::myMethod called" << std::endl;}
};
/// <summary>
/// 指针传递:传递抽象类的实例的指针
/// </summary>
/// <param name="interfacePtr"></param>
void doSomething1(IMyInterface* interfacePtr) {interfacePtr->myMethod();
}/// <summary>
/// 错误用法,不允许使用抽象类类型作为函数参数,也就是说不能实例化。
/// </summary>
/// <param name="interfacePtr"></param>
//void doSomething2(IMyInterface interfacePtr) {
//    interfacePtr.myMethod();
//}/// <summary>
/// 引用传递 需要传递抽象类的实例对象的引用.
/// </summary>
/// <param name="interfacePtr"></param>
void doSomething3(IMyInterface &interfacePtr) {interfacePtr.myMethod();
}/// <summary>
/// 对象的指针传递
/// </summary>
/// <param name="pMyCalss"></param>
void doSomething4(MyClass* pMyCalss) {pMyCalss->myMethod();
}/// <summary>
/// 值传递:会创建myObj的副本
/// </summary>
/// <param name="myObj"></param>
void doSomething5(MyClass myObj) {myObj.myMethod();
}/// <summary>
/// 引用传递:直接操作原始对象
/// </summary>
/// <param name="myObj"></param>
void doSomething6(MyClass &myObj) {myObj.myMethod();
}int main() {MyClass obj;IMyInterface* pMyInterface = &obj;doSomething1(pMyInterface);//doSomething2(obj); 错误用法doSomething3(*pMyInterface);doSomething4(&obj); doSomething5(obj); doSomething6(obj);return 0;
}

1.抽象类(接口)的实例的指针传递

/// <summary>
/// 指针传递:传递抽象类的实例的指针
/// </summary>
/// <param name="interfacePtr"></param>
void doSomething1(IMyInterface* interfacePtr) {interfacePtr->myMethod();
}int main() {MyClass obj;IMyInterface* pMyInterface = &obj;doSomething1(&obj);doSomething1(pMyInterface);return 0;
} 

将抽象类指针作为函数参数传递。这允许函数接受任何实现了抽象类接口的类的实例。

2.抽象类(接口)的实例值传递(错误用法)

/// <summary>
/// 编译时错误,抽象类不能被实例化,不允许使用抽象类类型作为函数参数,也就是说不能实例化。
/// </summary>
/// <param name="interfacePtr"></param>
//void doSomething2(IMyInterface interfacePtr) {
//    interfacePtr.myMethod();
//}

抽象类不能被实例化,因此不能作为值传递给函数。

3.抽象类(接口)的实例的对象的引用传递

/// <summary>
/// 引用传递 需要传递抽象类的实例对象的引用.
/// </summary>
/// <param name="interfacePtr"></param>
void doSomething3(IMyInterface &interfacePtr) {interfacePtr.myMethod();
}int main() {MyClass obj;IMyInterface* pMyInterface = &obj;doSomething3(*pMyInterface);return 0;
}

将抽象类对象的引用作为函数参数传递。这允许函数直接访问和修改原始对象。

4.实例对象的指针传递

/// <summary>
/// 对象的指针传递
/// </summary>
/// <param name="pMyCalss"></param>
void doSomething4(MyClass* pMyCalss) {pMyCalss->myMethod();
}int main() {MyClass obj;IMyInterface* pMyInterface = &obj;doSomething4(&obj); return 0;
}

将具体类对象的指针作为函数参数传递。这允许函数接受任何实现了抽象类接口的类的实例。

5.实例对象的值传递

/// <summary>
/// 值传递:会创建myObj的副本
/// </summary>
/// <param name="myObj"></param>
void doSomething5(MyClass myObj) {myObj.myMethod();
}
int main() {MyClass obj;doSomething5(obj); return 0;
}

将具体类对象作为值传递给函数。这创建了一个对象的副本,因此函数内部对对象的修改不会影响原始对象。

6.实例对象的引用传递

/// <summary>
/// 引用传递:直接操作原始对象
/// </summary>
/// <param name="myObj"></param>
void doSomething6(MyClass &myObj) {myObj.myMethod();
}int main() {MyClass obj;doSomething6(obj);return 0;
}

将具体类对象的引用作为函数参数传递。这允许函数直接访问和修改原始对象。

三、注意事项

  • 当传递接口指针时,确保指针指向的对象确实实现了该接口。
  • 当传递类对象时,确保对象的状态不会因为函数的调用而受到影响,除非函数是类的成员函数。
  • 引用参数可以避免拷贝对象,提高效率。
  • 指针参数可以接受空指针,引用参数不能接受空引用。
  • 通过接口指针或类对象的传递,可以编写出更加灵活和可扩展的代码。
http://www.ritt.cn/news/22328.html

相关文章:

  • 唐山疫情最新消息今天seo价格是多少
  • 网站怎么做来流量西安seo代理计费
  • 响应网站 整屏在线建站网页制作网站建设平台
  • 网站快照前显示中文怎么做的百度营销是什么
  • 电脑有固定IP 做网站免费seo网站诊断免费
  • 桂林北站客服电话互联网广告行业
  • 国外营销型网站建设电脑清理软件十大排名
  • 网站服务器 免费百度快照在哪里
  • 网站建设专家公司排行卖链接的网站
  • 温州网站设计网络广告营销
  • 虚拟机web网站怎么做百度刷seo关键词排名
  • 做结婚请柬网站有那些软件测试培训
  • 宾馆网站建设方案推广项目
  • 长春市大学生网站建设关键词挖掘网站
  • 企业宣传片制作拍摄搜索seo引擎
  • 企业网站多少钱一个seo sem是什么
  • 南通江苏网站建设百度指数查询网
  • 美国访问国内网站西安seo优化顾问
  • 北京市通信管理局 网站备案网站为什么要做seo
  • 专业集团门户网站建设方案搜索引擎优化到底是优化什么
  • dede 后台 不能保存网站名称seo内容优化
  • php做网站最容易怎样进行seo推广
  • 怎样用dw做网站导航条百度站内搜索
  • 网站 优点2345网址导航怎么卸载
  • 移动互联网开发是做什么的?seo排名优化公司
  • 线上编程哈尔滨seo优化
  • 宁波 做网站武汉关键词包年推广
  • 什么地方可以做网站专业的seo外包公司
  • 楼凤网站怎么做的哪个推广平台推广最靠谱
  • 做影视网站怎么赚钱临沂百度代理公司有几个