继承类的指针问题
pointer problems with inherited class
在下面的代码中,SecClass从FirstClass继承了'item'。然而,当我在main中运行"ClassC"时,第一项和第二项都是210。如果我从继承的类(FirstClass)中删除指针,它就会正常运行。我在指针和继承方面仍然很不稳定,所以我在这里缺少了一些东西。。。
// declaration of FirstClass
// FirstClass.h
#include <iostream>
#ifndef FIRSTCLASS_H
#define FIRSTCLASS_H
using namespace std;
class FirstClass
{
private:
int *item;
public:
FirstClass();
FirstClass(int thatItem);
~FirstClass();
int getItem();
void setItem(int thatItem);
};
#endif
// the implementation of FirstClass.h
// FirstClass.cpp
#include "FirstClass.h"
using namespace std;
FirstClass::FirstClass()
{
int *setInitial = new int;
*setInitial = 5;
item = setInitial;
}
FirstClass::FirstClass(int thatItem)
{
item = &thatItem;
}
FirstClass::~FirstClass(){}
int FirstClass::getItem()
{
return *item;
}
void FirstClass::setItem(int thatItem)
{
item = &thatItem;
}
// declaration of SecClass
// SecClass.h
#ifndef SECCLASS_H
#define SECCLASS_H
#include "FirstClass.h"
using namespace std;
class SecClass : public FirstClass
{
private:
int *secItem;
public:
SecClass();
SecClass(int newItem, int thatItem);
~SecClass();
int getSecItem();
void setSecItem(int newItem);
};
#endif
// the implementation of SecClass.h
// SecClass.cpp
#include "SecClass.h"
using namespace std;
SecClass::SecClass()
{
int *setSecInitial = new int;
*setSecInitial = 16;
secItem = setSecInitial;
}
SecClass::SecClass(int newItem, int thatItem) : FirstClass(thatItem)
{
secItem = &newItem;
}
SecClass::~SecClass(){}
int SecClass::getSecItem()
{
return *secItem;
}
void SecClass::setSecItem(int newItem)
{
secItem = &newItem;
}
// main program
#include <iostream>
#include "FirstClass.h"
#include "SecClass.h"
using namespace std;
int main()
{
FirstClass classA;
cout << "classA item: " << classA.getItem() << endl << endl;
FirstClass classZ(86);
cout << "classZ item: " << classZ.getItem() << endl << endl;
SecClass classB;
cout << "classB first item: " << classB.getItem() << endl;
cout << "classB second item: " << classB.getSecItem() << endl << endl;
SecClass classC(72, 210);
cout << "classC first item: " << classC.getItem() << endl;
cout << "classC second item: " << classC.getSecItem() << endl;
return 0;
}
您的构造函数
void FirstClass::setItem(int thatItem)
{
item = &thatItem;
}
正在做一件非常糟糕的事情,即存储临时对象的地址(传递给构造函数的int
)。
int
将在从构造函数返回后立即被销毁,并且您的item
指针将指向一个已被其他对象重用的内存区域。
当你做这种事情时,任何事情都可能发生(包括从你鼻孔里飞出来的守护进程),所以不要这样做。
这是使用指针的修改后的代码。它有效。正如你所提到的,它只是了解指针等
class FirstClass
{
private:
int *item;
public:
FirstClass();
FirstClass(int *thatItem);
~FirstClass();
int getItem();
};
FirstClass::FirstClass()
{
item = new int(5);
}
FirstClass::FirstClass(int *thatItem)
{
item = thatItem;
}
FirstClass::~FirstClass(){}
int FirstClass::getItem()
{
return *item;
}
class SecClass : public FirstClass
{
private:
int *secItem;
public:
SecClass();
SecClass(int *newItem, int *thatItem);
~SecClass();
int getSecItem();
};
SecClass::SecClass()
{
secItem = new int(16);
}
SecClass::SecClass(int *newItem, int *thatItem) : FirstClass(thatItem)
{
secItem = newItem;
}
SecClass::~SecClass(){}
int SecClass::getSecItem()
{
return *secItem;
}
int main()
{
FirstClass classA;
cout << "classA item: " << classA.getItem() << endl << endl;
int *i = new int(86);
FirstClass classZ(i);
cout << "classZ item: " << classZ.getItem() << endl << endl;
SecClass classB;
cout << "classB first item: " << classB.getItem() << endl;
cout << "classB second item: " << classB.getSecItem() << endl << endl;
int *j = new int(72);
int *k = new int(210);
SecClass classC(j,k);
cout << "classC first item: " << classC.getItem() << endl;
cout << "classC second item: " << classC.getSecItem() << endl;
return 0;
}
相关文章:
- 关于 c++ 函数中指针赋值的简单问题
- 链表指针问题
- C++ 关于指针取消引用的技术问题
- C++中的指针和常量问题不大
- 包含矢量指针的结构的内存释放问题
- 指针问题:从不兼容的类型"int"分配给"int *"
- 将字节数组转换为带有字节序问题的指针
- 关于如何使用指向主窗口的指针的 QT 问题
- 当成员值从指针更改为非指针时,C++常量问题
- 为什么循环会导致指针出现问题?
- 使用指针计算堆栈问题的大 O 表示法
- 构造函数 (C++) 中的 char 指针参数存在问题
- 指向包含对齐 C 结构C++类的 C 指针的对齐问题
- 涉及指针和手动实现的矩阵类的问题
- 从基指针到派生的强制转换问题
- 迭代器的指针操作问题
- 64 位迁移问题:指针更改
- C++模板使用问题指针
- 跳到C++第13章练习问题4-指针
- 用std::pair数组初始化std::map问题(指针错误?)