小编Edi*_*iac的帖子

dynamic_cast和多态

这是我在这个网站上的第一个问题,所以请随意突出我的单词选择,问题结构等问题.

最近,我dynamic_cast在处理多态时开始使用,我读过dynamic_cast它不会创建该类的另一个实例,而是创建另一个指向该对象的实例.

在测试时dynamic_cast,我遇到了这个问题.这是代码:

//main.cpp

#include <iostream>

class Base{
public:
    int BaseNum;
    virtual void BaseFunction(){};
};

class Derived : public Base{
public:
    int DerivedNum; 
    virtual void DerivedFunction(){};
};

int main(){

    Base * ptrBase = new Base;
    ptrBase->BaseNum = 0;
    Derived * ptrDerived = dynamic_cast<Derived *>(ptrBase);
    ptrDerived->DerivedNum = 1;

    std::cout << ptrBase->BaseNum << ptrDerived->DerivedNum << std::endl;

    system("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

该计划在该行中崩溃:

ptrDerived->DerivedNum = 1;
Run Code Online (Sandbox Code Playgroud)

在调试时,它说"无法读取内存".我的结论是,如果原始内存分配是为层次结构中较高的类保留的,我不能贬低,但我想我可能错了.

代码在哪里出错了?

c++ polymorphism inheritance dynamic-cast

4
推荐指数
1
解决办法
1359
查看次数

返回一个对象时,我不能简单地在类名之后使用{}

以嵌套类的教育代码为例:

class enclose {
    struct nested { // private member
        void g() {}
    };  
public:
    static nested f() { return nested{}; } 
};   

int main() {
    //enclose::nested n1 = e.f(); // error: 'nested' is private

    enclose::f().g(); // OK: does not name 'nested'
    auto n2 = enclose::f(); // OK: does not name 'nested'
    n2.g(); }
Run Code Online (Sandbox Code Playgroud)

将此代码复制并粘贴到Microsoft Visual Studio 2012时,我收到错误

static nested f() { return nested{}; }
Run Code Online (Sandbox Code Playgroud)

其中问题是关于函数返回嵌套的方式.这不是我第一次看到代码以这种方式返回值,但我通常会忽略它并以更长的方式执行它.这是编译器问题吗?

c++ return

3
推荐指数
1
解决办法
58
查看次数

在类范围内声明一个与类属性同名的局部变量

在观察另一个人的代码时,我意识到在A类的方法中,他声明了一个与A类属性同名的本地int.例如:

//classA.h

class A{
    int Data;

    void MethodA();
};
Run Code Online (Sandbox Code Playgroud)

//classA.cpp

#include "classA.h"

using namespace std;

void A::MethodA(){
    int Data; //local variable has same name as class attribute

    Data = 4;

    //Rest of Code
}
Run Code Online (Sandbox Code Playgroud)

我发现很奇怪编译器会在不返回错误的情况下接受它.在上述情况下,是否将4分配给本地数据或A :: Data,以及在更复杂的情况下会导致哪些问题?

c++ variables attributes class local

1
推荐指数
1
解决办法
1613
查看次数