当前位置:  开发笔记 > 编程语言 > 正文

在C++中使用抽象类

如何解决《在C++中使用抽象类》经验,为你挑选了2个好方法。



1> Johannes Sch..:

您的问题是您应该接受函数中的引用.原因是引用实际上并不复制传递的参数.但是如果你接受A- 而不是引用A&- 那么你实际上复制了传递给参数对象的参数,你得到的是一个类型的对象A- 但实际上是不允许的!

    // the reference parameter will reference the actual argument
    void setInstance(A &newInstance) {
            // assign the address of the argument to the pointer member
            // instance. 
            instance = &newInstance;
    }

然后,您必须将类中的成员更改为指针.它不能作为引用,因为setInstance它将改变它引用的内容 - 引用只能在其整个生命周期中引用一个对象,而指针可以设置为指向不同的事情,只需将其重新分配给不同的地址即可.其余部分就是这样的

    void doSomething() {
        // call a member function on the object pointed to
        // by instance!
        instance->action();
    }

private:

    // a pointer to some object derived from A
    A *instance;

另请注意,您必须使用编译C++程序g++,因为它还将C++标准库链接到您的代码

g++ -o test test.cpp # instead of gcc!



2> Eric Petroel..:

你正在做什么将在Java中工作,因为声明类型为"A"的参数或成员变量实际上意味着"指向A的指针".在C++中,你实际上需要明确这一点,因为它们是两个不同的东西:

void setInstance(A* newInstance) { // pointer to an "A"
                instance = newInstance;
}

并在声明中:

A* instance; // Not an actual "A", but a pointer to an "A"

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有