c++中类内的函数怎么调用
我调用的时候写的是
bookmanger::add();
但是编译出错:cannot call function"bookmang::add()"without object
谁能解释一下是怎么回事啊 展开
你必须先创建一个bookmanger副本,然后用
bookmanger bm;
bm.add()
或者,
bookmanger *bm = new bookmanger();
bookmanger->add()调用。
如果你一定要用类名来调用,可以定义函数为static:static void bookmanger::add()。
函数中的manager拼错了,应该是bookmanager。
c++构造函数:C++用以初始化对象的数据成员的一种函数。完好定义的类一旦建立,就可看成完全封装的实体,可以作为一个整体单元使用。类的实际内部工作隐藏起来,使用完好定义的类的用户不需要知道类是如何工作的,只要知道如何使用它即可。
扩展资料:
构造函数作用:
初始化对象的数据成员,规则:构造函数与类同名且无返回值,在对象实例化时自动调用、构造函数可以有多个重载形式、实例化对象时仅用到一个构造函数、当用户没有定义构造函数时,编译器自动生产一个构造函数。
编译系统为对象的每个数据成员(m_strName)分配内存空间,并调用构造函数School()自动地初始化对象的m_strName值设置为"bullworth"。
在C++中,类是支持数据封装的工具,对象则是数据封装的实现。C++通过建立用户定义类支持数据封装和数据隐藏。
在面向对象的程序设计中,将数据和对该数据进行合法操作的函数封装在一起作为一个类的定义。对象被说明为具有一个给定类的变量。每个给定类的对象包含这个类所规定的若干私有成员、公有成员及保护成员。
参考资料:百度百科-c++构造函数
函数调用的一般形式为:
函数名(实参列表);
实参可以是常数、变量、表达式等,多个实参用逗号分隔。
在C语言中,函数调用的方式有多种,例如:
// 函数作为表达式中的一项出现在表达式中
z = max(x, y);
m = n + max(x, y);
// 函数作为一个单独的语句
printf("%d", a);
scanf("%d", &b);
// 函数作为调用另一个函数时的实参
printf( "%d", max(x, y) );
total( max(x, y), min(m, n) );
在函数调用中还应该注意的一个问题是求值顺序。所谓求值顺序是指对实参列表中各个参数是自左向右使用呢,还是自右向左使用。对此,各系统的规定不一定相同。
参考资料:C++ 百度百科
拓展资料:
C++是在C语言的基础上开发的一种面向对象编程语言,应用非常广泛。常用于系统开发,引擎开发等应用领域,支持类、封装、继承、多态等特性。C++语言灵活,运算符的数据结构丰富、具有结构化控制语句、程序执行效率高,而且同时具有高级语言与汇编语言的优点。
C++语言是对C语言的扩充,从Simula中吸取了类,从ALGOL语言中吸取了运算符的一名多用、引用和在分程序中任何位置均可说明变量,综合了Ada语言的类属和Clu语言的模块特点,形成了抽象类,从Ada Clu和ML等语言吸取了异常处理,从BCPL语言中吸取了用//表示注释C++语言保持了C语言的紧凑灵活、高效以及易于移植性强等优点,它对数据抽象的支持主要在于类概念和机制,对面向对象风范的支持主要通过虚拟机制函数因C++语言既有数据抽象和面向对象能力,运行性能高,加上C语言的普及,而从C语言到C++语言的过渡较为平滑,以及C++语言与C语言的兼容程度可使数量巨大的C语言程序能方便地在C++语言环境中复用,使C++语言在短短几年内能流行。
bookmanger bm1;
bm1.add();
如果你一定要用类名来调用,可以定义函数为static:
static void bookmanger::add()
bm1.add();这样调用。
bookmanger::add()这样的调用方法只有在有方法覆盖或重写时才能调用,或者将该方法设为静态方法。
bookmanger bm;
bm.add()
或者
bookmanger *bm = new bookmanger();
bookmanger->add()调用。
还有
你的manager拼错了。。因该是bookmanager