0

我的主要课程如下所示:

#include "stdafx.h"
using namespace std;

class MemoryAddressing : Memory {
    int _tmain(int argc, _TCHAR* argv[])
    {
        Memory mem;
        int hp = Memory.ReadOffset(0x000000);
    }
}

然后我有我的第二节课:

#include <windows.h>
#include <iostream>

using namespace std;

static class Memory {
public : static int ReadOffset(DWORD offset) {
    DWORD address = 0x000000;
    DWORD pid;
    HWND hwnd;
    int value = 0;

    hwnd = FindWindow(NULL, L"");

    if(!hwnd) {
        cout << "error 01: Client not found, exiting...\n";
        Sleep(2000);
    }else {
        GetWindowThreadProcessId(hwnd, &pid);
        HANDLE handle = OpenProcess(PROCESS_VM_READ, 0, pid);
        if(!handle) {
            cout << "error 02: no permissions to read process";
        }
        else {
            ReadProcessMemory(handle, (void*) offset, &value,     sizeof(value), 0);
        }
    }
}
};

很明显,我正在尝试ReadOffset从我的Memory班级继承我班级的方法MemoryAddressing。我不知道该怎么做,似乎班级无法交流。

我已经知道 Java 和 C#,但我认为 C++ 非常不同。

4

2 回答 2

1

没有这样的概念static class

并且类的默认继承是私有的。私有继承意味着关系对类的用户是隐藏的。很少使用它,但有点像聚合,意味着“在面向对象级别上实现”,而不是“是一种类型”。

并且不建议调用方法_tmain,但是您要做什么?覆盖主要?(或者您正在尝试复制 Java,其中类具有静态主要方法以使其可作为入口点运行)。

于 2013-01-16T16:38:14.633 回答
0

在 C++static class中不起作用。您的继承语法也已关闭:

class MemoryAddressing : Memory {

应该

class MemoryAddressing : public Memory {

:在 C++ 中,类在in 继承之后需要一个访问修饰符。如果没有提供,则默认为private. 以下是C++ 教程中关于继承的章节的摘录:

In order to derive a class from another, we use a colon (:) in the declaration of the    
derived class using the following format:

class derived_class_name: public base_class_name
{ /*...*/ };

Where derived_class_name is the name of the derived class and base_class_name is the   
name of the class on which it is based. The public access specifier may be replaced by  
any one of the other access specifiers protected and private. This access specifier   
describes the minimum access level for the members that are inherited from the base   
class.

因此,如果没有修饰符,则只会继承私有成员。但是,由于不能从派生类访问私有成员,所以本质class A : private B上不会导致继承发生。

于 2013-01-16T16:53:44.807 回答