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

C++与Java类和对象的异同

前言

面向对象编程 (Object-Oriented Programming, OOP),是一种基于对象的编程思想,C++和Java语言都是具有这样特性的编程语言。本文用于介绍C++和Java类和对象部分的区别。

异同

1.类的定义

类是对象的蓝图,用于定义对象的行为和属性,两种语言使用相同的关键字class定义类。需要注意的是:c++在类的定义之后需要加上分号,而java则不用。

class MyClass{//c++类定义示例int num=114514;void setNum(int n){num=n;}
};
class MyClass{//Java类定义示例int num=114514;void setNum(int n){num=n;}
}

2.类的创建

两种语言中,类都通过new关键字进行实例化,对象的创建方式相同,但语法略有不同。

// C++ 对象创建
MyClass* obj = new MyClass();
obj->setNum(10);
// Java 对象创建
MyClass obj = new MyClass();
obj.setNum(10);

3.成员函数和成员变量

两种语言都允许类包含成员函数(方法)和成员变量(字段),并且都通过public(公共),private(私有)和protected(保护)三种关键字控制成员的权限,但在语法上有所不同。

// C++ 成员函数和成员变量
class MyClass {
public:int publicNum;
private:int privateNum;
public:void setPrivateNum(int n) {privateNum = n;}
};
// Java 成员函数和成员变量
class MyClass {public int publicNum;private int privateNum;public void setPrivateNum(int n) {privateNum = n;}
}

4.构造方法

构造方法用于初始化类的对象,两种语言都支持默认构造函数,构造函数的重载,this关键字等用法。

c++支持初始化列表:

class Person {
public:int age;Person() : age(0) {} // 默认构造函数Person(int a) : age(a) {} // 带参数的构造函数
};

而在 Java 中,构造方法也用于初始化对象,但 Java 不支持初始化列表,所有成员变量的初始化必须在构造方法体内完成。此外,Java 的构造方法名称必须与类名相同。

class Person {int age;Person() {this.age = 0; // 默认构造方法}Person(int a) {this.age = a; // 带参数的构造方法}
}

 5.静态成员变量

两种语言都支持静态成员变量,这是一种属于类而不属于特定对象的变量。

在c++中,静态成员变量只能在类外完成定义并初始化。

class MyClass {
public:static int count;
};
int MyClass::count = 0; // 类外定义和初始化

在Java中,静态成员变量直接在类中完成定义并初始化。

class MyClass {static int count = 0; // 直接定义和初始化
}

6.代码块

在 Java 中,除了普通代码块外,还支持静态代码块和实例代码块。静态代码块用于类加载时的初始化操作,而实例代码块则在每次创建对象时执行。

class MyClass {static {System.out.println("静态代码块执行"); // 静态代码块}{System.out.println("实例代码块执行"); // 实例代码块}
}

而在 C++ 中,代码块通常用于局部作用域的控制或条件分支中的代码执行。C++ 支持匿名命名空间来实现类似 Java 静态代码块的功能。

namespace {int initStaticData() {return 10;}
}

示例代码

#include <iostream>
using namespace std;class Person {
//公共权限
public:int age;static int count;//静态成员变量Person() : age(0) { count++; }Person(int a) : age(a) { count++; }//初始化列表
};int Person::count = 0;int main() {Person p1, p2(25);cout << "Total persons: " << Person::count << endl;return 0;
}
class Person {int age;static int count = 0;//静态成员变量//不带参数的构造方法Person() {this.age = 0;count++;}//带参数的构造方法Person(int a) {this.age = a;count++;}public static void main(String[] args) {Person p1 = new Person();Person p2 = new Person(25);System.out.println("Total persons: " + Person.count);}
}

http://www.xdnf.cn/news/703189.html

相关文章:

  • 依赖nacos实例动态创建线程池并监听服务上下线
  • 深度解读漏洞扫描:原理、类型与应用实践
  • PostGIS栅格数据类型解析【geomval】
  • makefile学习笔记
  • Java图片处理实战:Imgscalr技术方案
  • 视觉中国:镜头下的中国发展图景
  • C++030(内联函数)
  • Δ-Σ ADC的工作原理
  • 2025东北CCPC(部分+详解)
  • Java从入门到精通 - 面向对象编程基础
  • 将can日志数据提取到excle中
  • HOMIE——遥操类似ALOHA主从臂的外骨骼驾驶舱收集数据:通过上肢模仿学习和全身控制RL训练自主策略
  • JVM虚拟机监控及性能调优实战!
  • mqtt c语言publish topic
  • 6 质量控制中的常用缩略语和符号(OEE)以及解释
  • 嵌入式学习之系统编程(七)线程的控制(互斥与同步)和死锁
  • CPG开源项目对比
  • 18度的井水
  • C++补充基础小知识:为什么要继承、什么时候继承、什么时候直接用
  • 高并发计数器LongAdder 实现原理与使用场景详解
  • Jmeter性能测试(应用场景、性能测试流程、搭建测试环境)
  • 实例与选项对象
  • SpringBoot+Vue+Echarts实现可视化图表的渲染
  • 自动生成程序的heap文件
  • #!/usr/bin/env python
  • JS中的属性描述符
  • Day 20
  • 生成式引擎在不同行业的应用案例
  • 第十章 Java基础-Static静态变量
  • 基于物理约束的稀疏IMU运动捕捉系统