跳至主要內容

成员变量为本类类型

chanchaw小于 1 分钟cpp

概述

c++ 不同于 java ,后者的成员变量可以是本类类型,而前者则不可以,如果要实现相同的效果前者的成员变量要使用本类类型的指针

案例

头文件

#pragma once

#ifndef ADDR_H
#define  ADDR_H

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

class Addr
{
private:
	UINT_PTR addr;
	Addr* child;
public:
	Addr(UINT_PTR a);
	void setAddr(UINT_PTR a);
	UINT_PTR getAddr();

	void setChild(Addr* a);
	Addr* getChild();
	string toString();
};

#endif

cpp文件

#include "Addr.h"
#include<sstream>
using namespace std;

// 构造函数
Addr::Addr(UINT_PTR a):addr(a) {}

void Addr::setAddr(UINT_PTR a) {
	addr = addr;
}

UINT_PTR Addr::getAddr() {
	return addr;
}

void Addr::setChild(Addr* a) {
	child = a;
}

Addr* Addr::getChild() {
	return child;
}

string Addr::toString() {
	return "addr:"+std::to_string(addr);
}

成员变量的 gettersetter 都采用类类型指针的方式,使用该类的方法如下:

void initAddr() {
	Addr* baseAddrP = new Addr(BASE_ADDR);
	Addr* offset1P = new Addr(OFFSET01);
	Addr* offset2P = new Addr(OFFSET02);

	offset1P->setChild(offset2P);
	baseAddrP->setChild(offset1P);

	cout << "已初始化基址和偏移,十进制基址是:" << baseAddrP->toString() << endl;
}

即通过 new 创建对象后返回的是对象的指针而不像 java 返回的是对象