对象调用成员函数用点号.,要求函数公有非静态,如obj.func();const对象只能调用const成员函数;指针用->,引用用.;虚函数调用依赖实际类型。

对象调用成员函数的基本语法
直接用点号 . 连接对象名和函数名,前提是该函数是公有(public)且非静态的。比如 obj.func(),其中 obj 是已构造完成的对象实例。
注意:不能对空指针或未初始化对象这么做;若函数有参数,按声明顺序传入即可。
调用时遇到 “not declared in this scope” 错误
这通常不是调用问题,而是编译器根本没看到函数声明——常见于头文件没包含、类定义不完整、或函数在类外定义但忘了写 ClassName::func() 前缀。
- 检查是否在使用前包含了定义该类的头文件(如
#include "MyClass.h") - 确认函数在类内有声明(哪怕只是
void doSomething();),且拼写和大小写完全一致 - 如果函数体写在 .cpp 文件里,确保实现了
MyClass::doSomething() { ... },而非裸写doSomething() { ... }
const 对象只能调用 const 成员函数
如果声明了 const MyClass obj;,那么 obj.func() 会编译失败,除非 func() 被标记为 const(即形如 void func() const;)。
这是因为 const 成员函数承诺不修改对象状态,编译器靠这个做安全检查。漏加 const 是实际项目中最常被忽略的细节之一。
示例:
class Data {
public:
int getVal() const { return val; } // ✅ 可被 const 对象调用
void setVal(int v) { val = v; } // ❌ const 对象不能调用
private:
int val;
};
通过指针或引用调用成员函数的区别
用指针得用箭头 ->,用引用仍用点号 .。两者语义不同,但调用效果一致——最终都是触发同一份函数代码。
-
ptr->func()等价于(*ptr).func(),前提是ptr不为空 -
ref.func()中ref是引用变量,必须绑定到有效对象,不存在“空引用”概念 - 虚函数调用行为取决于实际对象类型(动态绑定),和用
.还是->无关
别为了省一个字符把指针当引用用,也别在不确定指针是否有效的前提下直接 ->,这类错误往往在运行时才暴露。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











