派生类 C++ 中的向上转换变量
upcasting variable in derived class c++
如何更改派生类中继承变量的类型?我有以下课程:
class Position;
class StonePosition;
class Position {
public:
Position() {}
};
class StonePosition : public Position {
int count;
public:
StonePosition(const int count) { this->count = count; }
int getCount() { return this->count; }
void setCount(int count) { this->count = count; }
friend ostream& operator<<(ostream&, StonePosition);
};
class Board {
protected:
Position* crrPos;
public:
Board() { }
Position* getCrrPos() { return crrPos; }
void setCrrPos(Position* pos) { crrPos=pos; }
};
class StoneBoard : public Board {
public:
StoneBoard(const int &count) { this->crrPos=new StonePosition(count); } //<----------------
StonePosition* getCrrPos() { return (StonePosition*)crrPos; }
void setCrrPos(StonePosition* pos) { crrPos=pos; }
};
用箭头标记问题的位置。我需要在 StoneBoard 类中将变量的类型从 Position 更改为 StonePosition。 我找到了一个可以使用向上转换的选项,但它仅适用于单个方法,我需要更改整个类的变量。
问题解决了,看看我的回答。
变量"crrPos"不是Position类型,而是指向Position的指针类型,这很重要,因为指向Position的指针可以指向Position或从Position派生的类而不会丢失任何内容。
如果你设计好你的类,并利用虚函数,你通常可以完全避免上投的需要。
#include <iostream>
class Base {
public:
virtual void foo() { std::cout << "Base::foo()n"; }
virtual bool isDerived() const { return false; }
};
class Derived : public Base {
public:
void foo() override { std::cout << "Derived::foo()n"; }
bool isDerived() const { return true; }
};
int main() {
Base* crrPos = new Derived;
crrPos->foo();
bool isDerived = crrPos->isDerived();
std::cout << isDerived << 'n';
delete crrPos;
}
现场演示:http://ideone.com/UKcBaA
问题已经解决,我只使用投影((StonePosition*)Position*):
#include <iostream>
using namespace std;
class Position;
class StonePosition;
class Position {
public:
Position() {}
};
class StonePosition : public Position {
int count;
public:
StonePosition(const int count) { this->count = count; }
int getCount() { return this->count; }
void setCount(int count) { this->count = count; }
friend ostream& operator<<(ostream&, StonePosition);
};
template <typename TPos> class TBoard {
protected:
TPos* crrPos;
public:
TBoard() { }
TPos* getCrrPos() { return crrPos; }
void setCrrPos(TPos* pos) { crrPos=pos; }
};
class Board {
protected:
Position* crrPos;
public:
Board() { }
Position* getCrrPos() { return crrPos; }
void setCrrPos(Position* pos) { crrPos=pos; }
};
class StoneBoard : public Board {
public:
StoneBoard(const int &count) { this->crrPos=new StonePosition(count); }
Position* getCrrPos() { return crrPos; }
void setCrrPos(Position* pos) { crrPos=pos; }
};
int main(){
StoneBoard s(7);
cout<<((StonePosition*)s.getCrrPos())->getCount();//<----right here
system("pause");
return 0;
}
而且它的工作很好:)
相关文章:
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 变量定义到C++布尔值转换
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 如何使用C++将字符串中的字符转换为整数变量
- 有没有将变量名称转换为双指针的简短方法?
- 静态成员变量不会由 gettext 转换
- 如何在C++中将字节向量(std::vector<uint8_t>)转换为不同的uint32_t,uint16_t和uint8_t变量
- VS 2017告诉我我正在尝试转换变量,但我没有
- 游戏引擎:如何从结构:编码实践转换变量
- 派生类 C++ 中的向上转换变量
- C++ 为什么我不能在结构中使用或强制转换变量进行算术运算?
- 如何强制转换变量成员以将其作为函数的引用参数传递
- gsoap 和 qt 转换变量内存句柄
- visualc++在转换变量时使用不同的基本类型
- 通过解引用在C中强制转换变量
- c++ -强制类型转换变量以及如何处理它们
- 转换变量类型(或变通方法)
- 为什么转换变量函数参数很重要?
- 在 Unicode 中转换变量
- 带有std::线程强制转换变量的c++多线程服务器