主类不能从我的第二个类继承方法

时间:2013-01-16 16:33:38

标签: c++ class memory inheritance methods

我的主要课程如下:

#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 ++非常不同。

2 个答案:

答案 0 :(得分:1)

没有static class

这样的概念

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

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

答案 1 :(得分:0)

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

class MemoryAddressing : Memory {

应该是

class MemoryAddressing : public Memory {

在C ++类中,在继承:之后需要访问修饰符。如果未提供,则默认为private。以下是the C++ tutorial's chapter on inheritance:

的摘录
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实际上不会导致继承发生。