一个简单的例子快速理解C++类

256 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

类的声明

C++类由成员构成,成员既可以是变量也可以是函数

构建一个IntCell类举例

class IntCell{
	public:
		IntCell()
		{
			storedValue=0;
		} 
		IntCell(int initialValue)
		{
			storedValue = initialValue;
		}
		int read()
		{
			return storedValue;
		}
		void write(int x)
		{
			storedValue=x;
		} 
	private:
		int storedValue;
};

其中private表明storedValue是私有变量,对外不可见(透明)

一种更简洁的方式

class IntCell
{
	public:
		explicit IntCell(int initialValue=0)
		:storedValue(initialValue){}
		int read() const
		{
			return storedValue;
		}
		void write(int x)
		{
			storedValue = x;
		}
	private:
		int storedValue;
};

IntCell中的构成函数中使用了默认值,如果构建IntCell类对象时没有传入参数storedValue会默认为0

第五行为初始化列表,可以直接初始化数据成员, 当数据成员具有复杂初始化过程的类类型时可以节省很多时间;在数据成员为const情况下意味着对象在构建之后就不能够被修改,那么数据成员的值只能在初始化列表中进行初始化

IntCell的构造函数是explicit,所有的单参数构造函数都必须是explicit以避免后台的类型转换

只检测但是不改变对象状态的成员函数为访问函数,如IntCell中的read函数;改变状态的是修改函数,如IntCell中的write函数

类函数调用示例

#include<iostream>

using namespace std;

/*class IntCell{
	public:
		IntCell()
		{
			storedValue=0;
		} 
		IntCell(int initialValue)
		{
			storedValue = initialValue;
		}
		int read()
		{
			return storedValue;
		}
		void write(int x)
		{
			storedValue=x;
		} 
	private:
		int storedValue;
};
*/

class IntCell
{
	public:
		explicit IntCell(int initialValue=0)
		:storedValue(initialValue){}
		int read() const
		{
			return storedValue;
		}
		void write(int x)
		{
			storedValue = x;
		}
	private:
		int storedValue;
};
int main(){
	IntCell m, n(6);
	cout<<m.read()<<endl;
	cout<<n.read()<<endl;
	m.write(5);
	n.write(7);
	cout<<m.read()<<endl;
	cout<<n.read()<<endl;
	return 0;
} 

接口与实现分离

假设我们在IntCell.h中提供接口,在IntCell.cpp进行实现,在main.cpp使用

IntCell.h代码

#ifndef IntCell_H
#define IntCell_H

class IntCell
{
	public:
		explicit IntCell(int initialValue = 0);
		int read() const;
		void write(int x);
	private:
		int storedValue;
};

#endif

在文件开始时先要确认符号IntCell_H没有被定义(#ifndef),如果以及被定义则什么都不做,如果没有被定义则进行定义

IntCell.cpp代码

#include"IntCell.h" 

IntCell::IntCell(int initialValue):storedValue(initialValue)
{
}

int IntCell::read() const
{
	return storedValue;
}

void IntCell::write(int x)
{
	storedValue = x;
}

main.cpp代码

#include<iostream>
#include"IntCell.h"

using namespace std;

int main(){
	IntCell m, n(6);
	cout<<m.read()<<endl;
	cout<<n.read()<<endl;
	m.write(5);
	n.write(7);
	cout<<m.read()<<endl;
	cout<<n.read()<<endl;
	return 0;
}