`

3、c++中的类

 
阅读更多

c++中的类和java中定义一样,类是用户定义的一种(元)数据类型,类包含数据和方法,类与实例的关系 就像 基本数据类型如int 与x的关系,x是整形具有数字相关的操作;cout和cin是iostream的实例(java中讲实例和方法,c++讲对象和函数,其实是一样的;具体cout是ostream,cin是istream的实例);

函数原型:

函数声明由函数返回类型、函数名和参数列表组成。参数列表必须包括参数类型,但不必包含具体类型实例。这三个元素被称为函数原型,函数原型描述了函数的接口。

 

函数原型类似函数定义时的函数头,又称函数声明。为了能使函数在定义之前就能被调用,C++规定可以先说明函数原型,然后就可以调用函数。函数定义可以放在主函数后面。 由于函数原型是一条语句,因此函数原型必须以分号结束。函数原型由函数返回类型、函数名和参数表组成,它与函数定义的返回类型、函数名和参数表必须一致。函数原型必须包含参数的标识符(对函数声明而言是可选的);

 

函数原型fun(double);函数定义fun(double x);

使用库方法,要添加相应的头文件,如何写一个自己的方法,跟java里类似,但要在main()函数前添加函数原型;函数原型描述了函数接口,

 

#include <iostream.h>
int myFirstFunction(int);
int main()
{
	int x;
	x= myFirstFunction(4);
	cout<<"this value : "<<x<<endl;
	cout<<"this value : "<<myFirstFunction(0)<<endl;  //可以直接调用方法返回值
	return 0;
}
int myFirstFunction(int x){
return x= x+100;
}

从前面的几个例子中,main函数都有int返回值,java中中main方法是不能有返回值的,在c++中,也可以使void的,声明为int型,那这个返回值会被谁调用呢?

 

可以将计算机操作系统作为调用程序,main()返回值交给了操作系统,约定返回值为0表示程序运行成功,非0表示存在问题;

 

查看一个变量的内存地址:

 

#include <iostream.h>
int main()
{
	int x;
	x= 4;
	cout<<"this parameter memory address : "<<&x<<endl;
	return 0;
}

 输出:this parameter memory address : 0x0018FF44

 

 

short int              带符号2字节短整形 - 32768 ~ 32767
unsigned int       无符号4字节整形   0 ~ 2^32 -1  

 

c++的String与java的String不一样;c++本身没有对String类型封装;

c++中 char hello[5] = "hello";  //这样会保错,因为这是字面赋值方式,会在hello后面加个\0,变成6个字符;

使用char hello[5]={'h','e','l','l','0'};不会报错;但在打印时多出两个汉字:烫虉  若改为6就没事了;

使用 char hello[6] = "hello"; 不会报错;

 

通过cin来读取String:

char x[7];

 

cin>>x;   

若这样输入 he lloooo   只会读取前两个字符he,若输入hellooo程序运行时出错;

如何将he llo正确读入:cin.getline(hello,7):

#include <iostream.h>
int main()
{
	char hello[7];
	cin.getline(hello,7);//将输入的字符赋值给hello;
	cout<<hello;
	return 0;
}

输出:

he llo

he lloPress any key to continue

若执行:

        cout<<"ok";
	char hello[7];
	cin.getline(hello,7);//将输入的字符赋值给hello;
	cout<<"hello"<<hello<<endl;
	return 0;

 输出为:

ok[回车]

hello

而没有执行输入;因为cin将回车键当做空字符输入,这样会导致运行不明确,可以修改为:

	cout<<"ok";
	char hello[7];
	cin.get();  //添加一个无返回的空接收
	cin.getline(hello,7);//将输入的字符赋值给hello;
	cout<<"hello"<<hello<<endl;
	return 0;

c++的String是用string ;并添加<string>不是<string.h> 或<cstring>

#include <iostream>
#include <string>
int main()
{
	using namespace std;
	string s;
	s = "ok";
	cout<<s+"\"skx\"";
	return 0;
}

 字符数组的赋值和追加:要添加头文件。

#include <iostream>
#include <string>
#include <cstring>
int main()
{   
	using namespace std; 
	char a[3]="ok";
	char b[3];
	char c[6] = "世界";
	strcpy(b,"ok");
	strcat(b,c);
	cout<<b<<endl;
	return 0;
}

 上面b的长度声明为3,实际打印出来更长,这样可能出现异常,c++提供了两个相对安全的方法:strncpy和strncat;

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Sqlite3 C++ 简单单例数据库操作类封装

    在数据库操作类中使用单例模式可以避免资源浪费,因为数据库连接通常是昂贵的资源。当多个对象需要共享同一个数据库连接时,单例模式就显得尤为重要,它可以保证所有操作都通过同一连接进行,避免了多线程环境下的...

    C#调用C++DLL导出类

    此外,如果C++类中有虚函数,还需要考虑多态性的问题,可能需要设计更复杂的接口。 总结来说,C#调用C++DLL中的类主要涉及以下几个步骤: 1. 在C++DLL中定义导出类及其方法。 2. 在C#中使用DllImport加载DLL,并...

    C++工具类-常用工具类源码

    2. **解析HTML**:虽然不直接在`FileUtil`类中,但可以配合如`libxml2`或`pugixml`库来解析HTML文档,提取所需数据。 以上就是`C++工具类-常用工具类源码`中可能包含的一些核心功能。这样的工具类在实际开发中非常...

    从C++导出类到Python

    将C++类导出到Python,可以让我们在Python中使用C++的高性能代码,同时保持Python的开发便捷性。 1. **定义C++接口** 在C++中,我们需要为Python暴露一个清晰的接口。这意味着我们需要将类的方法声明为`extern "C...

    C++ 包含类两个类互相调用彼此的类成员变量和方法

    在C++编程中,类之间的相互调用是一个常见的设计模式,尤其在实现复杂系统或对象间的协作时。这种设计允许类A访问类B的成员,同时类B也可以访问类A的成员,形成一种循环依赖的关系。然而,这种关系需要谨慎处理,以...

    C#调用C++中的类

    3. **导出C++类**: 使用`__declspec(dllexport)`关键字导出C++类。这告诉编译器这些类和函数需要被外部程序(如C#)使用。例如: ```cpp #ifdef MYDLL_EXPORTS #define MYDLL_API __declspec(dllexport) #else...

    C++内部类详细分析

    1. **二义性问题**:如果多个基类中有同名的数据成员或成员函数,那么派生类中的这些成员将出现二义性。解决这一问题通常需要使用作用域解析操作符(::)来明确指定成员来自哪个基类。 2. **虚基类**:为了避免二义...

    C#调用C++类中的方法

    本教程将详细解释如何在C#中调用C++类中的方法,以及涉及到的关键知识点。 首先,C++类库通常以DLL动态链接库的形式存在,以便在运行时被其他程序调用。在C#中调用C++的DLL,你需要遵循以下步骤: 1. **创建C++ ...

    python C++包装类

    总结来说,"python C++包装类"是一种通过C++调用和管理Python代码的技术,它可以提供更高效、更可控的跨语言通信,使开发者能够在C++的高性能计算环境中灵活运用Python的丰富库和脚本能力。通过学习和掌握这一技术,...

    LUA调用C++类

    本文将详细介绍如何在LUA中调用C++类,并在Linux环境下进行编译。 首先,要实现LUA调用C++类,我们需要一个中间层,这个中间层通常被称为"绑定"或"包装器"。LUA的C API提供了与C/C++交互的接口,我们可以利用这些...

    json字符串转换c++类对象

    3. **定义C++类对象**: 在进行JSON转换之前,我们需要定义一个C++类,这个类将映射到JSON结构。例如,假设我们有以下JSON字符串: ```json { "name": "John Doe", "age": 30, "city": "New York" } ``` ...

    C++类变量声明

    本教程将深入探讨C++类变量的声明、初始化、访问控制以及与Java类声明的差异。 在C++中,类变量声明通常在类的定义内进行,语法如下: ```cpp class ClassName { // 访问修饰符 数据类型 变量名; // 或者 数据...

    C++工具类——动画Demo

    3. **C++类设计**:在C++中,动画类可能会包含以下几个关键部分: - **状态机**:用于管理动画的不同阶段,如开始、运行、暂停和结束。 - **时间管理**:通过计时器来控制动画的帧率和持续时间。 - **渲染函数**...

    dlopen加载c++ 函数及类 文档

    类是 C++ 中的一个特殊概念,它使得使用 dlopen API 变得更加复杂。解决方案是使用 extern "C" 限定符声明一个工厂函数,该函数返回类的实例。 在加载类时,需要注意 name mangling 问题,因为类的成员函数也需要...

    将现有的C++类转换成dll动态链接库

    例如,可以在类中添加一个`Instance()`函数,并在类头文件中声明这个函数,同时添加宏定义`#define InitFile(CInitFile::Instance())`。这样就可以通过宏`InitFile`来访问类的实例。 - 步骤5:将类的成员函数封装成...

    C++ 串口类SerialPort 源码

    本篇将详细介绍"C++串口类SerialPort"的相关知识点,以及如何通过源代码进行串口通信的实现。 首先,`CSerialPort` 类是对串口通信功能进行封装的对象,它通常包含了打开、关闭串口,设置波特率、数据位、停止位、...

    dlopen加载c++ 函数及类

    3. **名字修饰**:C++类和成员函数的名字在编译后会被修饰,所以在使用`dlsym`时,需要提供未修饰的C风格的函数名字。 4. **内存管理**:动态加载的类实例需要手动创建和销毁。你需要使用`dlmalloc`等函数来分配...

    C++3D跑酷游戏

    游戏中的模型、贴图、动画等素材,需要通过专业软件如3DS Max、Maya、Blender等创建,然后导入到游戏中。音效方面,C++可以使用库如SDL Mix或OpenAL来播放和处理音频,包括背景音乐、角色动作声音、环境音效等,增强...

    C#在C++中注册回调函数

    `Bridge`类中的`SetManagedCallback`方法接收C++传递过来的函数指针,并将其转换为C#的委托类型,然后调用C#的`SetCallback`方法。 4. **在C++中注册回调函数**: 在C++代码中,我们需要创建一个函数,该函数的...

Global site tag (gtag.js) - Google Analytics