标签: base-class

派生类无法在C#中显示基类变量的值

我正在尝试执行以下代码

class A
{
    protected int a;
    protected char b;
    public void Show()
    {
        a=5;
        MessageBox.Show(""+a);
    }
}

class B:A
{
    public void Show()
    {
        b='z';
        MessageBox.Show(""+a+ ""+b);
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到5(中值a)作为输出,当我做aa.show()其中aa的实例A,但是当我这样做bb.show(),这里bb是实例B输出出来的,0(价值a)z(的价值b).

有人可以解释为什么派生类无法显示a的当前值,即使它已被声明为受保护,而它能够显示正确的值b

更新:

我会尝试建议的解决方案.关于编译错误,没有,我能够得到问题中提到的输出.

c# variables inheritance base-class

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

如何限制覆盖属性是只读的

我有以下代码.

   class A
    {
        public virtual int BoardSize { get; set; }
    }

    class B : A
    {
        public override int BoardSize
        {
            get{return 100;}
        }
    }

    Class Client
    {
        B b = new B();
        b.BoardSize = 55;
    }
Run Code Online (Sandbox Code Playgroud)

在基类中,属性是可读/写的.但是在派生类中它是readonly并且应该总是返回100.虽然当我运行代码时我发现它总是按预期返回100.

但是,我不希望客户端在B类中设置BoardSize.所以它不应该允许客户端写b.BoardSize = 55.

这怎么可能?

c# properties base-class derived-class

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

根据情况在if语句中声明不同的数据类型:如何关闭编译器?

嘿所以我正在创建一个序列化函数,它接受一个基类指针'Joint',提取它'type'的联合后代,然后想要根据指针实际指向的任何类型的'关节' 来实例化正确类型的'定义'. .

  • 然而,我仍然得到关于基类关节不包含后代类确实具有的函数的错误,即使我static_cast指向正确类型的指针.我如何使编译器意识到指针正在被铸造一个具有该功能的新类型?

  • 我也得到关于'typedef'的错误,它可以根据关节*的'type'而不同,编译说它是未定义的.我如何告诉编译器无论如何,其中一个if语句都是真的?(Jointdef在if语句中声明)

这是来源:

template<class Archive>
b2Joint* const preSave(Archive & ar, b2Joint* Joint) 
{
    int Type = Joint->GetType();
    ar & Type; // pulled out first so we know what kind of JointDef to instantiate

    if(Type == b2JointType::e_distanceJoint){
        b2DistanceJointDef JointDef;
        static_cast<b2DistanceJoint *>(Joint);
            JointDef.localAnchorA=      Joint->GetAnchorA();
            JointDef.localAnchorB=      Joint->GetAnchorB();
            JointDef.length=            Joint->GetLength();
            JointDef.frequencyHz=       Joint->GetFrequency();
    }
    if(Type == b2JointType::e_weldJoint){
        b2WeldJointDef JointDef;
        static_cast<b2WeldJoint *>(Joint);
            JointDef.localAnchorA=      Joint->GetAnchorA();
            JointDef.localAnchorB=      Joint->GetAnchorB();
            JointDef.referenceAngle=    Joint->GetReferenceAngle();     // function added
    }
    if(Type == …
Run Code Online (Sandbox Code Playgroud)

c++ pointers if-statement base-class static-cast

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

基类构造函数是否在派生类构造函数之前实际调用

我知道这个问题有明确的答案:首先调用基类构造函数,然后调用派生类构造函数.

但我并不完全理解"被叫"这个词.这是否意味着构造函数的使用开始,或构造函数的使用完成?换句话说,下面的代码有两种可能的顺序:

  1. BaseClass构造函数启动 - > BaseClass构造函数完成 - > DerivedClass构造函数启动 - > DerivedClass构造函数完成.

  2. DerivedClass构造函数启动 - > BaseClass构造函数启动 - > BaseClass构造函数完成 - > DerivedClass构造函数完成.

哪一个应该是正确的顺序?如果1是正确的,在初始化DerivedClass实例之前,编译器如何知道调用BaseClass构造函数?

似乎案例2是正确的:"被叫"应该意味着构造函数的完成.后续问题是析构函数如何?我知道标准答案是"派生类的析构函数首先被调用".那么哪个是正确的顺序:

  • DerivedClass析构函数启动
  • DerivedClass析构函数完成
  • BaseClass析构函数启动
  • BaseClass析构函数完成

谢谢

class BaseClass {
public:
    BaseClass() {
        cout << "BaseClass constructor." << endl;
    }
};

class DerivedClass : public BaseClass {
public:
    DerivedClass() : BaseClass() {
        cout << "DerivedClass constructor." << endl;
    }
};

int main() {
    DerivedClass dc;
}
Run Code Online (Sandbox Code Playgroud)

c++ constructor base-class derived-class

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

C++如何创建创建派生类对象的基类,并访问基类的私有成员?

有什么办法可以让我derived class访问 的private成员,base class同时能够derivedbase class内部的方法上创建对象base class

像这样的东西:

class Derived;

class Base
{
public:
    void func()
    {
        // I want to create the derived obj here
        Derived derived;
        derived.func();
    }
public:
    int mBase = 5;
};

class Derived : public Base
{
public:
    void func()
    {
        // I need to have access to the private members of Base inside this method
        mBase = 6; 
    }
};
Run Code Online (Sandbox Code Playgroud)

错误如下:

Error: derived …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance base-class derived-class

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

如何在if语句中使用dynamic_cast

所以我有一个简单的任务要做.从一个基类派生出3个类.它们非常简单,将在下面提供.我需要做的是创建一个名为的新类PolymorphicAnimal,它将能够像animalAnimal基类派生的任何其他类一样运行.确切地说,他们需要做的就是在SoundOff调用方法后显示正确的文本.我猜我需要在dynamic_cast这里使用.我的问题是,什么是使用正确的语法dynamic_cast作为一个if声明,并尽一切派生类需要有至少一个虚拟方法呢?

#include "stdafx.h"
#include <iostream>
#include <string>

class Animal {
public:
virtual std::string SoundOff() = 0;
};

class Dog : public Animal {
std::string SoundOff() override { return "Woof"; }
};

class Cat : public Animal {
std::string SoundOff() override { return "Meow"; }
};

class Cow : public Animal {
std::string SoundOff() override { return "Muu"; }
};

class PolymorphicAnimal : public Animal {
std::string …
Run Code Online (Sandbox Code Playgroud)

c++ dynamic-cast class base-class

0
推荐指数
2
解决办法
1090
查看次数

指针还是变量?

最近,我正在学习MFC,下面的代码让我很困惑:

  class CRect : public tagRECT
{
public:

// Constructors

// uninitialized rectangle
CRect();
// from left, top, right, and bottom
CRect(int l, int t, int r, int b);
// copy constructor
CRect(const RECT& srcRect);
// from a pointer to another rect
CRect(LPCRECT lpSrcRect);
// from a point and size
CRect(POINT point, SIZE size);
// from two points
CRect(POINT topLeft, POINT bottomR
...
Run Code Online (Sandbox Code Playgroud)

CRect的基类是一个结构!我以前从没学过这个.如果我打电话的话

CWnd :: GetClientRect(LPRECT lpRect);

我可以使用rect&rect(CRect rect)作为参数.这太神奇了!

我想知道有关struct base的类的一些规则.谢谢!

c++ struct pointers base-class

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

在基类方法中访问派生类成员

我有一个特殊的要求,但无法找到解决方案.

class Base
{
public:
    void func()
    {
       //access the member say 'var' of derived class
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 在我们的例子中强制要求所有来自base的派生类都有成员'var'.
  2. 派生类的名称可以是任何名称.

c++ inheritance class base-class derived-class

-3
推荐指数
2
解决办法
1847
查看次数