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

C++怎么调用类中的函数

1. 栈上对象 调用普通成员方法

普通成员方法需要通过类的对象实例(或指针、引用)来调用。

示例:
class MyClass {
public:
    void normalMethod() {
        std::cout << "普通成员方法被调用" << std::endl;
    }
};

int main() {
    MyClass obj;         // 创建对象实例
    obj.normalMethod();  // 通过对象调用

    MyClass* ptr = &obj; // 对象指针
    ptr->normalMethod(); // 通过指针调用

    MyClass& ref = obj;  // 对象引用
    ref.normalMethod();  // 通过引用调用
}

2. 调用静态成员方法

静态成员方法(static 方法)属于类本身,无需对象实例,可直接通过类名调用。

示例:
class MyClass {
public:
    static void staticMethod() {
        std::cout << "静态方法被调用" << std::endl;
    }
};

int main() {
    MyClass::staticMethod();  // 直接通过类名调用

    MyClass obj;
    obj.staticMethod();       // 也可通过对象调用(不推荐,易混淆)
}

3. 堆上对象 调用普通成员方法

示例:
class MyClass {
public:
    void method() {
        std::cout << "通过指针/引用调用" << std::endl;
    }
};

int main() {
    MyClass* ptr = new MyClass(); // 动态分配对象
    ptr->method();
    delete ptr; // 释放内存

    MyClass obj;
    MyClass& ref = obj;
    ref.method();
}

4. 在类内部调用其他方法

类的方法可以直接调用本类的其他成员方法(包括私有方法)。

示例:
class MyClass {
private:
    void privateMethod() {
        std::cout << "私有方法被调用" << std::endl;
    }

public:
    void publicMethod() {
        privateMethod(); // 直接调用私有方法
    }
};

int main() {
    MyClass obj;
    obj.publicMethod(); // 输出 "私有方法被调用"
}

5. 调用常量方法(const 方法)

如果对象是常量(const),只能调用标记为 const 的成员方法。
非常量,只能使用非const 方法

示例:
#include<iostream>

using namespace std;

class MyClass {
public:
    void nonConstMethod() {
        std::cout << "非 const 方法" << std::endl;
    }

    void constMethod() const {
        std::cout << "const 方法" << std::endl;
    }
};

int main() {
    const MyClass constObj;
    MyClass noconstObj;
    // constObj.nonConstMethod(); // 错误:不能调用非 const 方法
    constObj.constMethod();      // 正确:调用 const 方法
    noconstObj.nonConstMethod();  // 正确:调用 非 const 方法
    //noconstObj.ConstMethod();  // 错误:调用 const 方法
}

6. 在继承中调用父类方法

子类可以直接调用父类的公有或保护方法。如果方法被重写(override),可通过作用域运算符 :: 显式调用父类版本。

示例:
class Parent {
public:
    void method() {
        std::cout << "父类方法" << std::endl;
    }
};

class Child : public Parent {
public:
    void method() {
        std::cout << "子类方法" << std::endl;
        Parent::method(); // 显式调用父类方法
    }
};

int main() {
    Child obj;
    obj.method(); // 先输出 "子类方法",再输出 "父类方法"
}

文章转载自:
http://boding.hdqtgc.cn
http://beguin.hdqtgc.cn
http://antivivisection.hdqtgc.cn
http://bergall.hdqtgc.cn
http://amyotonia.hdqtgc.cn
http://acred.hdqtgc.cn
http://blush.hdqtgc.cn
http://addressograph.hdqtgc.cn
http://brashly.hdqtgc.cn
http://attenuate.hdqtgc.cn
http://alcoholism.hdqtgc.cn
http://aquaria.hdqtgc.cn
http://bumpiness.hdqtgc.cn
http://candid.hdqtgc.cn
http://cardiometer.hdqtgc.cn
http://burstproof.hdqtgc.cn
http://car.hdqtgc.cn
http://bay.hdqtgc.cn
http://audition.hdqtgc.cn
http://blowup.hdqtgc.cn
http://calorimetry.hdqtgc.cn
http://calyceal.hdqtgc.cn
http://amchitka.hdqtgc.cn
http://apanage.hdqtgc.cn
http://birdieback.hdqtgc.cn
http://booted.hdqtgc.cn
http://anthropocentric.hdqtgc.cn
http://acetanilide.hdqtgc.cn
http://catsuit.hdqtgc.cn
http://aquamarine.hdqtgc.cn
http://www.dtcms.com/a/123660.html

相关文章:

  • 阿里云CDN应对DDoS攻击策略
  • #苍穹外卖#(个人使用)
  • MyBatis-Plus 的 FieldStrategy 属性
  • 2025年危化品安全管理人员备考指南|智能题库+核心考点解析
  • 工会成立100周年纪念,开发职工健身AI运动小程序、APP方案推荐
  • CDN流量技术详解
  • SpringMVC基础一(SpringMVC运行原理)
  • Navicat连接远程PostGreSQL失败
  • prometheus整合jmx_exporter 使用jmx_exporter监控Kafka
  • 指针指针的实现
  • 01分数规划
  • bash脚本手动清空mysql表数据
  • Java——抽象方法抽象类 接口 详解及综合案例
  • 从零到一:基于DeepSeek-R1的智能贪吃蛇开发实战
  • 【JAVA】常用的JDK8、JDK17 以及 JDK21 的主要新特性和演进过程
  • Ubuntu22安装docker28
  • .DS_Store文件泄露、.git目录泄露、.svn目录泄露漏洞利用工具
  • 驱动-字符设备驱动框架
  • Java学习手册:JVM、JRE和JDK的关系
  • 宇视设备视频平台EasyCVR打造智慧酒店安防体系,筑牢安全防线
  • openEuler Mugen 测试框架
  • 从PDF中提取表格:以GB/T2260—2007为例
  • js实现生肖宜忌展示
  • Linux重启命令(Linux Restart Command)
  • JS包装类型Array
  • 发票查验与OCR识别:财务流程的智慧双保险
  • java+postgresql+swagger-单表批量和循环insert、delete操作(八)
  • 人工智能:GPT技术应用与未来展望
  • c++进阶之----c++11(包装器)
  • Elasticsearch 官网阅读学习笔记01