C++ 第一个C++;类/指针
嘿,伙计们,几年前我自学了PHP,现在上大学,对Java比较精通(我的意思是我是一个初学者,但我的数据结构课程是在这门课上完成的。下学期我将学习算法) 无论如何,我想学习C++,并无意中发现: 现在真正让我困惑的是指针……我想我明白了理论,但一个真正简单的“程序”运行不正常。它会编译,但会出现内存错误 我决定在这里做几次搜索后购买C++底漆,这样它就可以在星期五到达。在那之前,有人能告诉我这个简单的代码有什么(可怕的)错误吗C++ 第一个C++;类/指针,c++,C++,嘿,伙计们,几年前我自学了PHP,现在上大学,对Java比较精通(我的意思是我是一个初学者,但我的数据结构课程是在这门课上完成的。下学期我将学习算法) 无论如何,我想学习C++,并无意中发现: 现在真正让我困惑的是指针……我想我明白了理论,但一个真正简单的“程序”运行不正常。它会编译,但会出现内存错误 我决定在这里做几次搜索后购买C++底漆,这样它就可以在星期五到达。在那之前,有人能告诉我这个简单的代码有什么(可怕的)错误吗 class Number { public: string
class Number {
public:
string *owner;
int getNum() {
return *num;
}
int getTwice() {
return *twice;
}
Number(int our_num, string me) {
*num = our_num;
*twice = 2 * *num;
*owner = me;
}
private:
int *num;
int *twice;
};
int main()
{
Number *nbr3 = new Number(3,"Bob");
cout << nbr3->getNum() << endl;
cout << nbr3->getTwice() << endl;
cout << nbr3->owner << endl;
delete nbr3;
system("PAUSE");
return 0;
}
类号{
公众:
字符串*所有者;
int getNum(){
返回*num;
}
int getTwice(){
返回*两次;
}
数字(int我们的_num,string me){
*num=我们的_num;
*两次=2**num;
*所有者=我;
}
私人:
int*num;
int*两次;
};
int main()
{
编号*nbr3=新编号(3,“Bob”);
cout getNum()num和tweeps不指向任何东西。在类的构造函数中,需要num=new int和tweeps=new int,而在析构函数中,需要删除它们。没有为num,tweeps,owner>分配指向的内存位置。因此,在构造函数中-
Number(int our_num, string me) {
num = new int;
twice = new int;
owner = new string;
*num = our_num;
*twice = 2 * (*num);
*owner = me;
}
由于该类正在管理资源,因此应遵循类编号
-
编辑1
指针与任何其他变量一样,但保留内存地址。仅声明int*ptr;
并不意味着ptr
立即指向有效内存位置。您应该将其分配/初始化到它应该指向的位置
所以
希望在一定程度上有所帮助。这就是问题所在:
Number(int our_num, string me) {
*num = our_num;
*twice = 2 * *num;
*owner = me;
}
private:
int *num;
int *twice;
在类中,您已经声明num和两次作为指针,但它们不指向
执行*num=our_num
不会更改指针,这意味着您正在取消保护num指向的内容,以便分配包含在我们的_num中的值。这将导致崩溃,因为num是一些随机值
为了解决这个问题,首先将指针设置为指向int
e、 g
那你就可以了
*num = our_num
所以当你写作的时候
int*num;
您正在告诉编译器num将包含一个地址
当您使用num
时,实际上您正在处理地址
当你写*num
的时候,你引用的是地址num
中的数据,没有**操作符,你尝试去做'2**num',你也有'num'和'tweep'作为指向某个内存的指针,但是你没有为它们分配内存哦,顺便说一句……我认为代码试图做的是相当明显的,但仅仅是简单而已案例:我有一个“Number”类,每个数字都有一个值和一个所有者,这两个值都是在创建新实例时传入的值,它是数字的两倍。我将要添加一个注释,说明你需要如何才能从第九次学习C++书籍,直到你提到你已经购买了C++底漆。。那么我该如何将num指针中存储的值乘以2呢?我的值是num中存储的值的2倍。我猜星号相当模糊……它应该是‘owner=new string;’谢谢!我在声明变量时以为内存已经分配好了。
int myints[2];
num = myints
twice = myints+1;
*num = our_num