下面的问题是怎么回事啊?c++的merger函数c 调用函数问题。

赶快加入吧
收藏,156 浏览
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
假设有如下代码:
#include &iostream&
#include &vector&
#include &string&
#include &algorithm&
template &typename T1&
void display(T1 x)
cout && x &&
template &typename T2&
void fun1(const string msg, const vector&T2& vec)
for_each(vec.begin(), vec.end(), display);
int main(int argc, char **argv)
string msg("Hello world");
vector&int&
vec.push_back(11);
vec.push_back(12);
vec.push_back(7);
fun1(msg, vec);
为什么这段代码会出错?用的是C++98的标准,编译器是g++
display函数不用模版函数的时候就可以编译通过:
void display(int x)
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
1月12日 回答
display() 需要显示的类型就是T2,改成下面的用g++编译就可以了。
template&typename T2&
void fun1(const string msg, const vector&T2& vec)
for_each(vec.begin(), vec.end(), display&T2&);
但是用clang 600.0.56 照样不能编译。定义fun1的时候直接报错:
candidate template ignored: couldn't infer template argument 'T'.
据说g++ 实现有错,我刚开始学,也不明白。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
1月12日 回答
给display添加类型标记就可以了
#include &iostream&
#include &vector&
#include &string&
#include &algorithm&
template &typename T1&
void display(T1 x)
cout && x &&
template &typename T2&
void fun1(const string msg, const vector&T2& vec)
for_each(vec.begin(), vec.end(), display&T2&);
int main(int argc, char **argv)
string msg("Hello world");
vector&int&
vec.push_back(11);
vec.push_back(12);
vec.push_back(7);
fun1&int&(msg, vec);
同步到新浪微博
不要错过该问题的后续解决方案
如果你没找到答案,记得登录关注哦,大家会尽全力帮你解决的 ^___^
最专业的开发者社区
最前沿的技术问答,最纯粹的技术切磋。让你不知不觉中开拓眼界,提高技能,认识更多朋友。
分享到微博?
关闭理由:
删除理由:
忽略理由:
与已有问题重复
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
内容质量差,或不适合在本网站出现
无意义讨论型问题
其他原因(请补充说明)
举报理由:
带有人身攻击、辱骂、仇恨等违反条款的内容
与已有问题重复
内容质量差,或不适合在本网站出现
答非所问,不符合答题要求
其他原因(请补充说明)
补充说明:有关c++的函数调用问题。_百度知道
有关c++的函数调用问题。
*p = new Sample,执行下面语句后,调用Sample类的构造函数的次数是Sample a[2]。=====Sample是一个类想请教一下下面的题目;A)0B)1C)2D)3请问为什么答案是D
提问者采纳
调用2次构造函数。但p与a没有关系,构建了两个对象;new Sample也是生成一个Sample对象。所以共调用了3次Sample类的构造函数,并把首地址赋给Sample*型指针pa[2]是Sample型数组
提问者评价
按照你说的,真的成功了,好开心,谢谢你!
其他类似问题
按默认排序
其他3条回答
a[2]已经构建了两个Sample实例,所以执行两次,new Sample执行一次,共三次
我的问题是为什么用new Sample 只执行一次的构造函数?
因为那个*p是指针,Sample *p是不会构建实例的,而Sample x这样定义的话,就是对象了,构建了对象就会调用构造函数。指针必须调用new才会构建实例
是不是说用Sample *p在创立指向a[0]的指针的时候调用了构造函数?
a【2】调用2次,new调用一次
这追问很有水平!!!个人建议,不要学C++了
你这个实在损我吗?
函数调用的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁一、Graphviz + CodeViz简单介绍
CodeViz是《Understanding The Linux Virtual Memory Manager》的作者&Mel Gorman&写的一款分析C/C++源代码中函数调用关系的open source工具(类似的open source软件有&、)。其基本原理是给 GCC 打个补丁(如果你的gcc版本不符合它的要求还得先下载正确的gcc版本),让它在编译每个源文件时 dump 出其中函数的 call graph,然后用 Perl 脚本收集并整理调用关系,转交给绘制图形(属于后端,CodeViz属于前端)。
CodeViz 原本是作者用来分析 Linux virtual memory 的源码时写的一个小工具,现在已经基本支持 C++ 语言,最新的 1.0.9 版能在 Windows + Cygwin 下顺利地编译使用。
基本介绍就到这儿,如果你对其原理比较感兴趣,可以参考这篇文章:分析函数调用关系图(call graph)的几种方法
二、Graphviz + CodeViz编译安装
1. 安装 GraphViz
调用图的生成依赖于 GraphViz,所以首先要安装 GraphViz。可以下载源码包编译、安装(下载主页:)。
如果是Ubuntu系统可以直接apt安装: sudo apt-get install graphviz
2. 安装 CodeViz
下载CodeVize源码包:
解压:tar xvf codeviz-1.0.12.tar.gz (目前最新版是1.0.12)
进入解压后的目录:cd codeviz-1.0.12/
CodeViz 使用了一个 patch 版本的 GCC 编译器,而且不同的 CodeViz 版本使用的GCC 版本也不同,可以下载 CodeViz 的源码包后查看 Makefile 文件来确定要使用的 GCC 版
本,codeviz-1.0.12 使用 GCC-4.6.2。实际上安装 CodeViz
时安装脚本make会检查当前的GCC版本如果不符合则会自动下载对应的 GCC并打
patch,但由于GCC较大如果网速不好且在虚拟机中的话容易下载失败或系统错误什么的,因此这里我们还是分步安装比较好,先安装gcc再回来安装
(1)安装 GCC
下载gcc-4.6.2.tar.gz到 cd codeviz-1.0.12目录下的compilers里。
下载地址:ftp://ftp.gnu.org/pub/gnu/gcc/gcc-4.6.2/gcc-4.6.2.tar.gz
CodeViz 的安装脚本 compilers/install_gcc-4.6.2.sh 会自动检测 compilers 目录下是否有
gcc 的源码包,若没有则自动下载并打
patch。这里前面已经下载,直接移到该目录即可,则剩下的就是解压安装了。install_gcc-3.4.6.sh 会解压缩 gcc打
patch,并将其安装到指定目录,若是没有指定目录,则缺省使用$HOME/gcc-graph,通常指定安装在/usr/
local/gcc-graph(这时需要 root 权限)。
安装: ./install_gcc-4.6.2.sh
注意:这里可能安装时有些错误,具体错误及解决方案见后面。
(2)安装 CodeViz
./configure && make install-codeviz
注1:不需要 make ,因为make的作用就是检测是否有gcc若没有则下载源码包,所以这里只要安装 codeviz 即可。具体查看 Makefile 文件。
注意:这里为什么不是通常用的make install,因为这里make
install的作用是先安装gcc再安装codeviz,而前面已经安装了 gcc,所以这里只需要安装 codeviz ,即make
install-codeviz脚本,该脚本也就是将genfull 和 gengraph 复制到/usr/local/bin 目录下。
目前为止,CodeViz 安装完成了。
三、基本使用方法
GraphViz 支持生成不同风格的调用图,但是一些需要安装额外的支持工具或者库程序,有兴趣的朋友可以到上查找相关资料。这里重点讲述 CodeViz 的使用方法,具体的图像风格控制不再详述。
CodeViz 使用两个脚本来生成调用图,一个是
genfull,该脚本可以生成项目的完整调用图,因此调用图可能很大很复杂,缺省使用 cdepn
文件来创建调用图;另一个是gengraph,该脚本可以对给定一组函数生成一个小的调用图,还可以生成对应的postscript
文件。安装时这两个脚本被复制到/usr/local/bin 目录下,所以可以直接使用而不需要指定路径。其基本步骤如下:
下面以编译一个简单的test.c文件为例进行说明:
1. 使用刚刚安装的gcc-4.6.2来编译当前目录下所有.c文件,gcc/g++为编译的每个 C/C++文件生成.cdepn 文件。只要编译(参数&-c)就行,无需链接。
即为:$ ~/gcc-graph/bin/gcc test.c
2.调用genful会在当前目录生成一个full.graph文件,该脚本可以生成项目的完整调用图信息文件,记录了所有函数在源码中的位置和它们之间的调用关系。 因此调用图信息文件可能很大很复杂,,缺省使用 cdepn 文件来创建调用图信息文件。
即为:$ genfull
3. 使用gengraph可以对给定一组函数生成一个小的调用图,显示函数调用关系。
即为:$ gengraph
四、简单示例演示
自己编写个简单的程序,看下效果再说~~~
#include &stdio.h&
void test1();
void test2();
void test3();
int main()
void test1()
void test2()
void test3()
按照上面的三个步骤依次进行如下图所示:
打开main.ps看到效果如下,一目了然:
五、进阶使用
当然大家使用CodeViz都不是用来玩的,而是用于真正的项目中,四中简单的使用根本不够,下面来点稍微高深点的。
1. 先来分析下上面的执行流程
首先使用刚刚安装的gcc编译我们的.c文件(PS:这里一定要指定刚刚安装gcc的
地方,否则用的是系统gcc而非我们安装的gcc),然后genfull创建full.graph文件,可以使用genfull
--help或者genfull
--man来查看如何使用。最简单的方式是在项目的顶级目录以无参数方式运行。由于项目的完全调用信息非常庞大,所以通常只是简单的生成项目的
full.graph,然后在后面使用genfull获取需要的调用信息。若是需要完整信息则将full.graph由dot处理然后查看来生成的
postscript文件。(dot是GraphViz中的一个工具,具体使用没有深究过,感兴趣的读者可以自行查阅~~~)。到test.c所在目录运
行genfull看到生成了full.graph文件,大家可以用cat查看下。接下来使用gengraph生成函数调用图,可以使用gengraph
--help或gengraph --man来查看如何使用。对于我而言,目前只关注下面几个选项就够了,即:
-f:指定顶级函数,即入口函数,如main等(当然不限定是main了);
-o:指定输出的postfile文件名,不指定的话就是函数名了,如上面的main;
--output-type:指定输出类型,例如png、gif、html和ps,缺省是ps,如上面的main.ps;
-d:指定最大调用层数;
-s:仅仅显示指定的函数,而不对其调用进行展开;
-i:忽略指定的函数
-t:忽略Linux特有的内核函数集;
-k:保留由-s忽略的内部细节形成的中间文件,为sub.graph
2. 使用gengraph时的选项参数值要使用""括起来,例如:
gengraph --output-type "png" -f main
3. 命名冲突问题
在一个复杂的项目中,full.graph并不十分完美。例如,kernel中的模块
有许多同名函数,这时genfull不能区分它们,有两种方法可以解决,其中第一种方法太复杂易错不推荐使用,这里就介绍下第二种方法,即使用
genfull的-s选项,-s指定了检测哪些子目录。例如kernel中在mm目录和drivers/char/drm目录下都定义了
alloc_pages函数,那么可以以下列方式调用genfull:
genfull -s "mm include/linux drivers/block arch/i386"
实际的使用中,-s非常方便,请大家记住这个选项。
4. 使用Daemon/Client模式
当full.graph很大时,大量的时间花费到读取输入文件上了,例如kernel的full.graph是很大的,前面生成的大约有15M,这还不是全部内核的函数调用分析信息。为了节省时间,可以讲gengraph以daemon方式运行,这药使用-p选项:
gengraph -p -g linux-2.6.25/full.graph
该命令返回时gengraph以daemon方式运行,同时在/tmp目录下生成了codeviz.pipe文件。要生成函数调用图,可以使用-q选项:
gengraph -q -t -d 2 -f alloc_pages
要终止gengraph的运行,使用如下命令:
echo QUIT & /tmpcodeviz.pipe
六、进阶演示
以分析《嵌入式实时操作系统 uC/OS-II (第二版)》中的第一个范例程序为例,是什么程序不要紧,这里主要看的是如何使用及使用后的效果。
首先分析main():
1. gengraph --output-type gif -f main
分析main()的call graph,得到的图如下,看不出要领:
2. gengraph --output-type gif -f main -s OSInit
暂时不关心OSInit()的内部实现细节(参数 -s),让它显示为一个节点。得到的图如下,有点乱,不过好多了:
3. gengraph --output-type gif -f main -s OSInit -i "OSCPUSaveSR;OSCPURestoreSR"
基本上每个函数都会有进入/退出临界区的代码,忽略之(参数 -i)。得到的图如下,基本清楚了:
4. gengraph --output-type gif -f main -s "OSIOSSemCreate" -i "OSCPUSaveSR;OSCPURestoreSR" -k
OSSemCreate()的内部细节似乎也不用关心,不过保留中间文件sub.graph(参数 -k),得到的图如下,
5. dot -Tgif -o main.gif sub.graph
修改sub.graph,使图形符合函数调用顺序,最后得到的图如下,有了这个都不用看代码了:)
接着分析OSTimeDly()的被调用关系:
gengraph --output-type gif -r -f OSTimeDly
看看哪些函数调用了OSTimeDly(),参数 -r ,Task()和TaskStart()都是用户编写的函数:
最后看看Task()直接调用了哪些函数:
gengraph --output-type gif -d 1 -f Task
只看从Task出发的第一层调用(参数 -d 1):
七、安装过程出现的错误及解决方案
1. 在运行./install_gcc-4.6.2.sh时出现下面错误:
gcc configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+
从错误中可以看出:GCC编译需要GMP, MPFR, MPC这三个库(有的系统已经安装了就没有这个提示,我的没有安装),有两种安装方法(建议第二种):
(1)二进制源码安装(强烈不推荐)
我使用的版本为gmp-4.3.2,mpfr-2.4.2和mpc-0.8.1,在&"
下载,根据提示的顺序分别安装GMP,MPFR和MPC(mpfr依赖gmp,mpc依赖gmp和mpfr),这里全部自己指定了安装目录,如果没有指定
则默认分装在在/usr/include、/usr/lib和/usr/share,管理起来不方便,比如想卸载的时候还得一个个去找:
安装gmp: ./configure --prefix=/usr/local/gmp-4.3.2; make install
安装mpfr: ./configure --prefix=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2/; make install
安装mpc: ./configure
--prefix=/usr/local/mpc-0.8.1 --with-gmp=/usr/local/gmp-4.3.2/
--with-mpfr=/usr/local/mpfr-2.4.2/; make install
PS:安装过程中可能又出现新的错误提示,请看2、3、4条。
配置环境变量:我这里指定了安装位置,如果没有指定则
这几个库的默认位置是/usr/local/include和/usr/local/lib,不管有没有指定GCC编译时都可能会找不到这三个库,需要确
认库位置是否在环境变量LD_LIBRARY_PATH中,查看环境变量内容可以用命令
$echo $LD_LIBRARY_PATH
设置该环境变量命令如下:
指定安装:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/gmp-4.3.2/lib:/usr/local/mpfr-2.4.2/lib:/usr/local/mpc-0.8.1/lib
默认安装:$export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib
PS:十分不推荐这种安装方法,一般来说这样的确可以成功安装,但是也不排除安装过程中又出现新的问题,具体看问题5。
(2)gcc自带脚本安装(强烈推荐)
方法(1)的安装方法十分繁琐,安装过程中可能出现各种预料不到的新错误,因此gcc
源码包中自带了一个gcc依赖库安装脚本download_prerequisites,位置在gcc源码目录中的
contrib/download_prerequisites,因此只需要进入该目录,直接运行脚本安装即可:.
/download_prerequisites
PS:该脚本内容如下:
#! /bin/sh
# Download some prerequisites needed by gcc.
# Run this from the top level of the gcc source tree and the gcc
# build will do the right thing.
# (C) 2010 Free Software Foundation
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see http://www.gnu.org/licenses/.
MPFR=mpfr-2.4.2
GMP=gmp-4.3.2
MPC=mpc-0.8.1
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$MPFR.tar.bz2 || exit 1
tar xjf $MPFR.tar.bz2 || exit 1
ln -sf $MPFR mpfr || exit 1
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$GMP.tar.bz2 || exit 1
tar xjf $GMP.tar.bz2
ln -sf $GMP gmp || exit 1
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$MPC.tar.gz || exit 1
tar xzf $MPC.tar.gz || exit 1
ln -sf $MPC mpc || exit 1
rm $MPFR.tar.bz2 $GMP.tar.bz2 $MPC.tar.gz || exit 1
可见是通过wget的方式下载安装,因此如果没有安装wget则需要先安装下。
大家仔细看下这个脚本,发现非常简单,就是从网上自动下载三个依赖库并解压,然后建立三个改名后的软链接分别指向这三个库,这里建立软链接过程中也可能出错,具体看问题6,大家也可以自己修改脚本,改成直接修改名称然后移到gcc目录下。
技巧:从这里也可以看出,gcc所依赖的库其实只要解压了放在gcc当前目录下就行了,方法(1)的那么多步骤其实都可以省掉,直接将下载的三个压缩包解压后改名移到gcc下面即可,也不用设置环境变量了。
2. 编译gmp时出现错误:
No usable m4 in $PATH or /usr/5bin (see config.log for reasons).
由此可以看出是缺少M4文件。可以去这里下载:http://ftp.gnu.org/gnu/m4/然后编译安装,我由于是Ubuntu系统,就直接
sudo apt-get install m4安装了。
3. 安装mpfr时出现错误:
configure: error: gmp.h can't be found, or is unusable.
这是因为在安装mpfr时未先安装gmp导致的,mpfr依赖于gmp。
4. 安装mpc时出现错误:
configure: error: libgmp not found or uses a different ABI.和configure: error: libmpfr not found or uses a different ABI.&。
同样是因为未安装mpc依赖的库gmp和mpfr。
5. 在运行./install_gcc-4.6.2.sh过程中出现错误,即按照gcc过程中出现的问题:
(1)libmpfr.so.1: cannot open shared object file: No such file or directory
分析:该脚本就是安装gcc,但是如果你出现了问题1,并且使用方法(1)解决该问题,那么你后期就可能出现这样的问题,当然你运气没那么背的话一般不会出现这样的问题,反正我运行比较背,出现了这样的问题。
解决方法:可以参考这篇文章http://blog.csdn.net/leo115/article/details/7671819解决。
(2)../../gcc-4.6.2/gcc/realmpfr.h:27:17: fatal error: mpc.h: No such file or directory
分析:gcc没找到所依赖的库mpc,原因很多,最有可能是你没设置环境变量或mpc放的地方不对。
解决方法:设置环境变量,看问题1。
(3) /usr/include/stdc-predef.h:30:26: fatal error: bits/predefs.h: No such file or directory
分析:用命令&locate
bits/predefs.h&找下该头文件的路径,发现是在'/usr/include/x86_64-linux-gnu'
解决方法:设置环境变量:
#export C_INCLUDE_PATH=/usr/include/i386-linux-gnu && export CPLUS_INCLUDE_PATH=$C_INCLUDE_PATH
/usr/bin/ld: cannot find crti.o: No such file or directory
分析:同样用&locate
crti.o& 找下这个文件,在'/usr/lib/i386-linux-gnu/crti.o'。
解决方法:设置LIBRARY_PATH
(LDFLAGS)这个环境变量如下:
#export LIBRARY_PATH=/usr/lib/i386-linux-gnu
(5)unwind-dw2.c:1031:
error: field `info' has incomplete type
分析:这个错误搞了好久,因为网上找不到对应的解决方法,只说这是gcc的一个bug。
解决方法:深入到源文件中,发现错误的地方是这样的:
static _Unwind_Reason_Code
uw_frame_state_for (struct _Unwind_Context *context, _Unwind_FrameState *fs)
struct dwarf_fde *
struct dwarf_cie *
const unsigned char *aug, *insn, *
memset (fs, 0, sizeof (*fs));
context-&args_size = 0;
context-&lsda = 0;
fde = _Unwind_Find_FDE (context-&ra - 1, &context-&bases); //这里返回了NULL
if (fde == NULL)
/* Couldn't find frame unwind info for this function.
target-specific fallback mechanism.
This will necessarily
not profide a personality routine or LSDA.
#ifdef MD_FALLBACK_FRAME_STATE_FOR
MD_FALLBACK_FRAME_STATE_FOR (context, fs, success); // 出错的地方
return _URC_END_OF_STACK;
return _URC_NO_REASON;
return _URC_END_OF_STACK;
//出错返回
出错的地方用标注了,因为fde返回了NULL,导致不能找到frame unwind info,最重要的是下面这个方法
MD_FALLBACK_FRAME_STATE_FOR (context, fs, success);
出错了,为什么返回NULL我肯定研究不出来,只知道这个函数调用失败了,导致不成功,于是我的解决方法十分偷懒,就是将下面的两行注释掉了,直接success,哈哈,勿喷我,因为这样做过后就解决了,后面一路成功~~~
// MD_FALLBACK_FRAME_STATE_FOR (context, fs, success); // 出错的地方
// return _URC_END_OF_STACK;
6.& 解决ln&-s&软链接产生Too&many&levels&of&symbolic&links错误
从网上查找了一下原因,原来是建立软连接的时候采用的是相对路径,所以才会产生这样的错误,解决方式是采用绝对路径建立软链接:这样问题就解决了。
本文查阅了网上的许多资料比较详细的讲解了CodeViz的安装和使用。CodeViz依赖于GraphViz,因而可以生成十分丰富的函数调用图。具体选项的使用及图像格式的选择可由读者根据个人需要和偏好自己揣摩使用。在分析源码的时候,把这些图形打印在手边,在上面做笔记,实在方便收益颇多。
九、参考资料:
1. http://blog.csdn.net/delphiwcdj/article/details/9936717
2. /hacrwang/archive//27296.html
3. /xuxm2007/archive//1851086.html
阅读(...) 评论()c++ max函数调用的问题_百度知道
c++ max函数调用的问题
求教;int y=max(a,y);}编译没错;stdio,c);printf(&quot,c=3,int c);,b=2,本人新手;nthe max number is %d&int max (int a.h&&#92:#include &lt,b;void main (void){int a=1,int bRT
提问者采纳
&#47,同理取得较大的值
return temp,使其实现功能{b,b;&#47,因此会出现错误? c,b=2;stdio,int c)
/temp是a;printf(&quot,对比temp与c的大小.h&nthe max number is %d&#92。更改一下;楼主你好~你只是声明了max函数;&#47、b大小;/int y=max(a? a,但是并没有定义它;
temp=(a&gt:b),把大的值赋给temp
temp=(c&gt:temp);/int max (int a,c=3;
/&#47,n&quot,&#92,c),int c);先比较a,y);void main (void){int a=1、b中大的值;} int max (定义max函数;返回temp(此时temp为这三个数中的最大值)} 希望楼主能看明白:#include &lt
提问者评价
printf(&看明白了,谢谢你!\n&)
其他类似问题
按默认排序
其他2条回答
你的max只是声明了一下,并没有实现啊,你应该在mian()函数后面实现max函数才行
肯定要出错啊!你只是声明了max函数而没有定义。语法是正确的,所以能编译通过,但是当调用max时找不到max的定义,所以连接时就会出错。可以在后面再加上int max(int a,intb,intc){
int temp = a&b:a,b;
return temp&c:temp,c;}
max函数的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C++ 类class的函数调用问题。_百度知道
C++ 类class的函数调用问题。
.,b;多个怎么调呢,b假如我现在设定了一个class di{;应该怎样调用呢,c都同时调用到void diaoyong();我想同时将a.void diaoyong(),c.diaoyong();}...;假如我想在主函数中定义了di a?如果单个可以
提问者采纳
三个独立的对象。a狗的脚是a狗的。建议多看看书,b。简单的理解就这样,保护成员,c为该类型的三个对象,c,c类理解问题。就像狗类 a,该类型包含什么函数或数据(特征)。,b,b,别的狗不能访问;其中a。其中又有私有成员。di为一个类型,b。。di a,公有成员,c只是其中狗类中三条狗(各有特征数据)所以只能单个调用;a。定义一个类class di
提问者评价
其他类似问题
函数调用的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 c 调用函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信