Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C/C++、C#、JAVA(一):代码模板与库代码的引入

C/C++、C#、JAVA(一):代码模板与库代码的引入

作者头像
痴者工良
发布于 2021-04-26 02:25:08
发布于 2021-04-26 02:25:08
83800
代码可运行
举报
文章被收录于专栏:痴者工良痴者工良
运行总次数:0
代码可运行

代码默认模板

编译性高级编程语言中,几乎每种语言,都有个静态的 main 方法作为程序启动入口,每种语言都有其编写规范。为了学习 C/C++、C#、JAVA四种语言,我们要先从默认代码模板中,慢慢摸索学习。

约定: 我们常常可以看到 函数、方法这两个词,很多人对此进行了混用。 方法,就是 void Test(){} 这样的形式; 函数,指具有确定命名的、并且可以通过名称调用的代码,属性、字段、方法、委托、事件等; 只要能够通过确定的名称调用(使用)的代码块,就是函数;而方法就是 返回值、名称、参数等组成的代码块;

C/C++、Java 主要是 驼峰命名(Camel-Case), C# 是Pascal 规则(帕斯卡命名)。 文章代码和示例比较多,对于命名这方面,可能不会严格按照此语言的规范编写。(主要是笔者习惯写C#)

代码模板

C
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>

int main()
{
    /* 代码 */
    return 0;
}
C++
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
using namespace std;

int main()
{
    /* 代码 */
   return 0;
}

C#

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
           /* 代码 */
        }
    }
}
JAVA
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.company;
import com.company.test.*;

public class Main {

    public static void main(String[] args) {
        Test test = new Test();
    }
}

C# 和 Java 的 main 方法都是静态入口。 C# 的 main 方法是大写,其余语言都是小写。

库代码的引入和解析

每种编程语言中,例如 sdk 等都会有大量丰富的官方库代码已经自定义库代码,那么,我们应该如何引入使用呢?

C

C语言 源文件以 .c.h 结尾,一般 .h 用来定义成员, .c 用来实现成员。 .c 称为源文件,.h 称为头文件。

C语言中,使用 #include "{文件名称}.{.c|.h}"#include <{文件名称}.{.c|.h}> 来使用系统或自定义的库代码。 简单来说,#include <> 是使用系统自带的代码,#include "" 是使用你自己写的代码或第三方代码。 请参考 http://c.biancheng.net/view/443.html

写代码和编译时,.c.h 文件和里面的代码没有任何联系。

C语言 中没有接口(面向对象),因此考虑到解耦,将函数的定义和实现两个部分分开,.h 文件定义外界可以访问使用的成员,以及如何调用成员。.c 实现 .h 中声明名的成员。

那么,如何使用 .h.c 声明和实现函数,并且能给外部使用呢?

实现 .h.c 以及外部调用

编写一个 Test.h 文件。 此文件声明了一个 getA方法,不需要输入参数,会返回一个 int 类型的值。 extern 关键字,声明了此方法能够被外部调用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>

extern int getA(void);

我们在 main 方法中,使用此方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include "Test.h"

int main() {
	int a = getA();
	printf("%d",a);
	return 0;
}

然后来实现 Test.c

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>

// 实现 getA方法
int getA(void) {
	return 666;
}

以上代码就是 .h.c 文件的编写方法以及提供外部调用。

.h.c 文件

前面我说了,.h、和 .c 文件,没有必然联系。下面我来解释一下。

因为 .h.c 不像 C#、JAVA 中的 接口和继承,没有强制规定,因此可以只写 .h,或只写 .c.h 也可以实现代码,例如 Test.h 文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
extern int getA(void) {
	return 666;
}

C语言的编译,经历预处理/预编译、编译、汇编、链接四个步骤。 预处理/预处理(Preprocessing):条件编译、宏定义处理等 编译(Compilation): 检查语法,生成汇编 汇编(Assemble):汇编代码转换机器码 链接(Linking):与其它组件组合起来生成可执行文件 资料参考 http://c.biancheng.net/view/1736.html

https://blog.51cto.com/7905648/1297255

.h.c 文件,在最后链接阶段,才会出现真正 联系。 请参考 https://www.cnblogs.com/laojie4321/archive/2012/03/30/2425015.html

C++

据说 C++ 之父 Bjarne Stroustrup 博士,都没有搞懂 C++ 这种编程。

C++ 源文件后缀为 .cpp

C++ 中,我们看到了 #include <iostream> ,为啥不带 .h.c? C++ 是 C语言 的超集,C++ 实现了面向对象,C++ 出现了命名空间和库的概念。 在 C++ 中,#include <stdio.h> 是一般的头文件引用方式;而 #include <iostream> 是 C++ 库的引用方式。引用的是 标准库

C++ 标准库分为两部分:

标准函数库: 继承C语言,由不属于类的函数组成。 面向对象类库: 类及其相关函数的集合。

命名空间

前面我们看到了 C++ 代码模板中,还有 using namespace std; ,这一句是引用命名空间。

在 c++ 中,也可以直接实现 .h 声明的 函数,但是这样跟不能体会到 面向对象 的优势。

C++ 使用面向对象,采用 命名空间-类-成员实现 的机构,来编写代码,示例如下。 编写 Test.h

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace first_space {
	int func();
}

编写 Test.c

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace first_space {
	int func() {
		return 666;
	}
}

main 函数中调用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include "Test.h"

using namespace std;
using namespace first_space;

int main()
{
	int a = func();		// first_space
	cout << a << endl;
	return 0;
}

可以看到,命名空间只是多了个范围限定。 在 C++ 中,函数可以定义在类中,命名空间中,也可以直接写在 源文件中。

C#

C# 是笔者最喜欢的语言,嘿嘿嘿。 C# 中类库编译后,是一个 .dll 文件。

以下是 C# 命名空间和引用命名空间的示例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace ConsoleApp1
{
    using Test;
    class Program
    {
        static void Main(string[] args)
        {
            T666 t = new T666();
            t.Test();
        }
    }
}
namespace Test
{
    public class T666
    {
        public void Test(){}
    }
}

C# 中,命名空间没有严格要求。 一般,命名空间以 [项目名称].[目录名称].[目录名称]... 组成。 以项目名称开头,后面每个子目录名称组成。 例如要实现用户身份认证的功能,将这部分代码放到 MyProj/Auth 目录中,那么命名空间就是 MyProj.Auth。 C# 的源文件以 .cs 结尾,一般来说,一个独立功能的类或接口,使用一个 .cs 文件。 但 C# 中,并不强制要求。这些慢慢学习 C# 时会学习了解到。很大程度上跟 C++ 的命名空间相似。

C# 中以命名空间作为限定范围,对类进行使用。 调用的最小粒度为类、结构体、枚举等。 所有的字段、属性、方法等必须在类中定义和实现。 C# 引入一个命名空间后,便能使用此命名空间的所有的类。

Java

Java 的规则还是比较多的。 Java 的源文件,以 .java 结尾。 每个 .java 文件中,只能有一个 public 类,并且类名称必须跟 .java 文件的名称相同。 Java 中,没有命名空间,而是以包的形式来调用,包名引用严格以目录名称设置。

Java 中,使用 import 关键字来引入包,例如 import java.io.*; 。 有两种引用形式,一种是引用具体的类名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import  java.io.PrintStream;

之后便可以使用 PrintStream 类。 另一种是使用 import java.io.*; ,可以使用此包下所有的类。

Java 中,标准库以 java.javax. 开头。

如果想将编写的类提供给外部使用,则要使用 package 关键字。

以下为一个示例.

程序目录结构如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.
│  main
│
└─com
    └─company
        │  Main.java
        │  MyFrame.java
        │
        └─test
                Test.java
                Test2.java

编写两个类,Test,Test2,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Test
package com.company.test;

public class Test {
    public void My() {
        Test2 t = new Test2();
    }
}


# Test2
package com.company.test;

public class Test2 {
}

main 函数中调用调用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.company;
import com.company.test.*;

public class Main {
    public static void main(String[] args) {
        Test test = new Test();
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【C++入门】关键字、命名空间以及输入输出
大耳朵土土垚
2024/04/10
2040
【C++入门】关键字、命名空间以及输入输出
C++入门篇1
C++是在C语言的基础上,又容纳了许多面向对象的编程思想,并增加了许多有用的库,以及编程范式,如果以及学习C语言后,对C++的学习也是很有帮助的。 C++补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的,比如:作用域方面,IO方面,函数方面,指针方面,宏方面
Yui_
2024/10/16
1180
C++入门篇1
【c++】c++基本语法知识-命名空间-输入输出-缺省参数
C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等
用户10925563
2024/06/04
1820
【c++】c++基本语法知识-命名空间-输入输出-缺省参数
【C++入门(上)】—— 我与C++的不解之缘(一)
        C++ 的第一个程序,梦回出学C语言,第一次使用C语言写代码;这里使用C++写第一个C++代码。
星辰与你
2024/10/17
1160
【C++入门(上)】—— 我与C++的不解之缘(一)
【C++】入门基础介绍(上)C++的发展历史与命名空间
在C++系列博客正式开始之前,我认为有必要了解一下关于C++的一些发展历程以及一些比较细碎但重要的C++和C语言的差异。
fhvyxyci
2024/10/06
2710
【C++】入门基础介绍(上)C++的发展历史与命名空间
【C++】入门基础(为C语言填坑)
C语言是结构化和模块化的编程语言,适合处理较小规模的程序,对于复杂、规模较大的问题,需要高度的抽象和建模时,C++更加合适。 C++兼容C语言绝多数的语法,C++是在C语言的基础上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。 C语言有一些语法的不足,C++对C语言设计不合理的地方进行了优化,C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。
_小羊_
2024/10/16
1730
【C++】入门基础(为C语言填坑)
开启C++之旅(上):探索命名空间与函数特性(缺省参数和函数重载)
都会想这是什么??大多老师都会让说:你们先记着这是固定的,以后会懂(结果到了期末考完也什么都没说)
是Nero哦
2024/01/18
2820
开启C++之旅(上):探索命名空间与函数特性(缺省参数和函数重载)
【C++】C++入门(一)
C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。来为学习C++类和对象打下基础。
zxctscl
2024/01/24
3140
【C++】C++入门(一)
【C++】命名空间详解
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存 在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化, 以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
P_M_P
2024/01/25
3220
【C++】命名空间详解
C++命运石之门代码抉择:C++入门(上)
走过了C语言的道路,终于迎来了C++的学习之旅,在经历面向过程的不断打磨,相信大家积累了不少的代码基础了,即将到来的是面向对象的语言——C++,C++的知识点稍显杂碎,或许在初步的学习会感觉到举步艰难,但是阳光总在风雨后,打好基础学到 stl 库的时候就会发现别样的彩虹!🌈😻
DARLING Zero two
2024/11/26
1430
C++命运石之门代码抉择:C++入门(上)
C++入门基础,看这篇就足够了!
C++是在C语言的基础上,又容纳了许多面向对象的编程思想,并增加了许多有用的库,以及编程范式,如果以及学习C语言后,对C++的学习也是很有帮助的。 C++补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的,比如:作用域方面,IO方面,函数方面,指针方面,宏方面
Yui_
2024/10/16
6940
C++入门基础,看这篇就足够了!
C++入门的基础
为什么会出现C++呢?为什么C++的关键字和C语言相对比起来,有着不少的增加? 其实想要搞明白为什么会出现这种状况,首先要明白的是C++是祖师爷用C语言的过程中,饱受C语言中一些限制的诟病,在C语言的基础上增加的一个更牛的系统。
薛定谔方程难
2024/02/05
2240
C++入门的基础
【C++】C++基础
下面只是看一下C++有多少关键字,不对关键字进行具体的讲解。后面对应文章会详细讲解。
ZLRRLZ
2024/12/13
3450
【C++】C++基础
4.C++中的函数重载,C++调用C代码,new/delete关键字,namespace(命名空间)
可以看到输出结果,每个函数的入口地址都不一样(重载函数的入口地址,必须使用强制转换来获取)
诺谦
2019/05/24
1K0
【C++初阶】--- C++入门(上)
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。
用户11029269
2024/05/24
1210
【C++初阶】--- C++入门(上)
C++入门
C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式 等。熟悉C语言之后,对C++学习有一定的帮助,本章节主要目标: 1. 补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的,比如:作用 域方面、IO方面、函数方面、指针方面、宏方面等。 2. 为后续类和对象学习打基础
绝活蛋炒饭
2024/12/16
2220
C++入门
【C++】入门基础(上)
提示:第一个链接不是C++官方文档,标准也只是更新到C++11,但是以头文件形式呈现,内容比较易看好懂,后两个链接分别是C++官方文档的中文版和英文版,信息很全,更新到了最新的C++标准,没有第一个那么易看,各有优点,相互结合使用即可。
云边有个稻草人
2024/10/21
1530
【C++】入门基础(上)
【C++】踏上C++学习之旅(一):初识C++和命名空间
本文是正式踏上C++学习之旅的第一篇文章,也是我分享C++笔记的第一篇文章。在这篇文章中,我会给大家介绍C++的发展历史,让大家更好从C语言过渡到C++,也会让大家认识到为什么C++能够兼容C语言的语法。
埋头编程
2024/10/16
1780
【C++】踏上C++学习之旅(一):初识C++和命名空间
【C++入门篇】学习C++就看这篇--->命名空间、缺省参数及函数重载
C++总计63个关键字,C语言32个关键字,其实不用记忆,后面随着我们日积月累自然而然就记住了。如下所示:
HABuo
2025/05/15
1640
【C++入门篇】学习C++就看这篇--->命名空间、缺省参数及函数重载
【C++的奇迹之旅】C++关键字&&命名空间使用的三种方式&&C++输入&输出&&命名空间std的使用惯例
C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式 等。熟悉C语言之后,对C++学习有一定的帮助,本章节主要目标:
学习起来吧
2024/03/30
2720
【C++的奇迹之旅】C++关键字&&命名空间使用的三种方式&&C++输入&输出&&命名空间std的使用惯例
相关推荐
【C++入门】关键字、命名空间以及输入输出
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验