专栏首页程序员C++之类(一)

C++之类(一)

在C++之中,我们使用类来定义自己的数据类型。通过自定义数据类型,可以使我们的编程变得更加方便。或者说C++设计类的目的就是为了使我们可以像使用基本数据类型一样来使用自定义的数据类型。我们知道基本数据类型都有自己相应的库函数,例如char类型的一些相关函数就在string.h这个头文件里面给我们提供了。类也是一样的,它可以定义自己的函数(方法)。下面给出类的声明:

class MyClass
{
	//数据成员
	int num;
	char str[10];
	double real;
	//函数成员
	void show();
};

一个类就想上面这样,由它的数据成员和函数成员共同构成。类相比C语言的结构体,多了函数成员这部分。我们在C语言的结构体之中不能出现函数成员,只有数据成员,但是C语言的结构体里面可以容纳函数指针,我们可以通过函数指针来调用函数。从这个角度来看,C语言也能做到类的功能。等到看完类,我们再来继续这个问题。

c++的类由关键字class来定义,class后面接着是类的名字。类有数据成员和函数成员。这就是直观看上去的类。下面我们继续完善这个类。

class MyClass
{
	//数据成员
	private:	//修饰符
	int num[10];
	char str;
	double real;
	
	//函数成员
	public:		//修饰符
	void show();
	
	protected:	//修饰符
	
};

可以看到有三个成员修饰符,这些修饰符的功能限制了我们使用成员的范围。 首先说一下修饰的作用域:从上一个修饰符开始直到下一个修饰符才结束,在此范围之内都是它的作用域。 private:这个修饰符修饰的成员只能在类内被使用,是类私有的成员。 public:它所修饰的成员可以在类内,也可以在类外被使用。是类所公开的成员。 protected:是被保护的成员,只能在类内部使用,或者被子类继承使用。 下面我们来看一下类的函数如何定义:

首先,类的函数可以在类内部定义,如下:

class MyClass
{
	//数据成员
	private:	//修饰符
	int num;
	char str[10];
	double real;
	
	//函数成员
	public:		//修饰符
	void show()
	{
	cout << num << endl;
	cout << str << endl;
	cout << double << endl;
	}
	
	protected:	//修饰符
	
};

其次,也可以在类的外部定义,如下:

void MyClass::show()
{
	cout << num << endl;
	cout << str << endl;
	cout << double << endl;
}

这样定义,需要注意将函数返回值写在最前面。然后是类名。中间这个符号是作用域运算符,然后是函数名。接着是参数列表,最后是函数体。

下面,我们给MyClass这个类再加上一些东西。然后跑一下这个程序。

#include <iostream>
#include <string.h>
using namespace std;

class MyClass
{
	//数据成员
	private:	//修饰符
	int num;
	char str;
	double real;
	
	//函数成员
	public:		//修饰符
	void show();
	void MyClass::set(int a,char * ch,double b);

	protected:	//修饰符
};

int main()
{
	MyClass class1;
	class1.set(10,'h',3.14159);
	class1.show();
	return 0;
}
void MyClass::show()
{
	cout << num << endl;
	cout << str << endl;
	cout << real<< endl;
}
void MyClass::set(int a,char * ch,double b)
{
	num = a;
	strcpy(&str,ch);
	real = b;
}

我们来看一下输出结果:

这就是类。从与现实所对应来看,类抽象了现实事物,它可以描述现实事物。比如:一个人有身高,体重,性别等数量上的特征,就可以抽象为类的数据成员;而一个人的能力,就能抽象为类的方法(函数)。比如,他会弹吉他,下围棋等。这就是他的技能。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 表达式树

    版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.ne...

    zy010101
  • Gamma校正

    Gamma源于CRT(显示器/电视机)的响应曲线,即其亮度与输入电压的非线性关系。

    zy010101
  • 拥塞控制原理

    版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.net/z...

    zy010101
  • mysql 查询出成绩表排名,两种实现方式

    lop
  • 破解APK修改资源文件

    本文,乃是反编译(逆向)首战,在此,特意记录过程中遇到的点点滴滴问题,如有不足之处,欢迎指正~

    HLQ_Struggle
  • 蛋白质组学第8期 文章复现之数据处理

    引用自(https://blog.csdn.net/Orange_Spotty_Cat/article/details/80312154)

    生信技能树
  • h文件和c文件的区别include本身只是一个简单的文件包含预处理命令,即为把include的后面文件放到这条命令这里,除此之外,没有其它的用处(至少我也样认为).

    其实在H文件里写函数也无所谓,只是不符合习惯而已。只要按照以上的格式写,一个H文件添加多少次都无所谓,

    仇诺伊
  • 多线程-事件

    创建  CreateEvent 销毁  CloseHandle 事件变为有信号(可以使用信号)  SetEvent 事件变为无信号(不可以使用信号)  Rese...

    用户1624346
  • 马化腾怒怼张一鸣 两位大佬为抖音“开撕”

    万万没想到,马化腾、张一鸣两位大佬会公然在朋友圈“开撕”!今日头条与腾讯之间的“战争”从内容竞争上升到了创始人间的“口水战”。

    IT派
  • Java函数式编程之Optional

    java.util.Optional是JDK8中引入的类,它是JDK从著名的Java工具包Guava中移植过来。本文编写的时候使用的是JDK11。Optiona...

    Throwable

扫码关注云+社区

领取腾讯云代金券