网上有关“C++类的成员函数可以调用其他类的成员函数吗”话题很是火热,小编也是针对C++类的成员函数可以调用其他类的成员函数吗寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。
可以,通常是这样的
一般遵循面对对象设计原则,其他类希望外部调用的会设计成public,于是你可以很容易地通过指针或者对象名或者引用去调用其它类的public函数
还有其他的情况:
static函数,这个可以全局调用,所以你自然也可以调用。
友元关系,如果你的这个类与需要调用的其他类是友元的关系,那么你可以打破public的限制调用其它类的成员函数
首先要知道类存在的理由,为何要面向对象。
C中的结构体就是定义一种数据格式,可以存储若干数据元素,并且它们的内存是连续的。
结构体的作用是封装一组有关联的属性,它们共同维护某种概念实体的状态。
在早期经典纯C工程当中,有经验的开发者早就开始利用结构体与函数指针实现简单的面向对象。
但是用结构体+函数指针使用不方便不灵活,所以C++最大的使命,面向对象就诞生了。
要注意的是C++与C的区别除了类之外,还有函数多态的特性、命名空间、STL等等特性。
类相比于结构体+函数指针最大的优势就是两个字:继承
撤了一大堆废话,针对LZ的问题可以归结为,在没有属性的时候,只有函数,使用类好不好,或者说何时可以如此使用。
如果LZ学习过设计模式,那么这个问题就颇为清晰,类的存在是为了更灵活地描述某种概念实体以及对它的操作。
一个只有函数而没有属性的类,其描述的实体可以认为是一种抽象的动作实体。
用通俗的话来讲,一个继承Animal的Cat类描述一个猫,猫有属性(形态,叫声,年龄等),也有动作(吃喝拉撒睡),这就是最经典LZ也熟知的一种类。
而抽象的动作类,就有比如一个继承File的DiskFile或者FtpFile等,它主要描述的是一组动作(读与写),它也许有状态(属性),也许没有。
这种抽象的动作类为何而存在?经典的策略设计模式就会大量地使用这种写法。
比如你要做视频处理软件,视频需要解码与加码如果只是用纯函数的化你的代码就会如下丑陋:
if(0?==?strcmp(fileType,?AVI))?{decode_AVI(file);
}?else?if(0?==?strcmp(fileType,?MP4))?{
decode_MP4(file);
}
.....
if(0?==?strcmp(fileType,?AVI))?{
encode_AVI(file);
}?else?if(0?==?strcmp(fileType,?MP4))?{
encode_MP4(file);
}
但是如果你有一个类AVType,只有两个函数:encode、decode,然后有AVIType、MP4Type继承它,那么你的代码大致就是:
AVType*?type?=?new?AVIType();?//?or?MP4Typetype->decode(file);
....
type->encode(file);
当你的同类方法多起来(如rmvb、wmv、flv解码器等等),你就会发现后者有多优秀。
最后总结对LZ的问题的回答就是:
如果没有继承也不会存在潜在继承的可能,也就是说用不到C++的多态特新,那么没有属性的类就没有存在的必要。
今天闲的无聊,说了一堆废话,LZ跳着看就行了O(∩_∩)O~
关于“C++类的成员函数可以调用其他类的成员函数吗”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!
本文来自作者[剪灯语]投稿,不代表海宁号立场,如若转载,请注明出处:https://hnjsjm.com/hainin/837.html
评论列表(3条)
我是海宁号的签约作者“剪灯语”
本文概览:网上有关“C++类的成员函数可以调用其他类的成员函数吗”话题很是火热,小编也是针对C++类的成员函数可以调用其他类的成员函数吗寻找了一些与之相关的一些信息进行分析,如果能碰巧解...
文章不错《C++类的成员函数可以调用其他类的成员函数吗》内容很有帮助