C++ 第一个C++;类/指针

C++ 第一个C++;类/指针,c++,C++,嘿,伙计们,几年前我自学了PHP,现在上大学,对Java比较精通(我的意思是我是一个初学者,但我的数据结构课程是在这门课上完成的。下学期我将学习算法) 无论如何,我想学习C++,并无意中发现: 现在真正让我困惑的是指针……我想我明白了理论,但一个真正简单的“程序”运行不正常。它会编译,但会出现内存错误 我决定在这里做几次搜索后购买C++底漆,这样它就可以在星期五到达。在那之前,有人能告诉我这个简单的代码有什么(可怕的)错误吗 class Number { public: string

嘿,伙计们,几年前我自学了PHP,现在上大学,对Java比较精通(我的意思是我是一个初学者,但我的数据结构课程是在这门课上完成的。下学期我将学习算法)

无论如何,我想学习C++,并无意中发现:

现在真正让我困惑的是指针……我想我明白了理论,但一个真正简单的“程序”运行不正常。它会编译,但会出现内存错误

我决定在这里做几次搜索后购买C++底漆,这样它就可以在星期五到达。在那之前,有人能告诉我这个简单的代码有什么(可怕的)错误吗

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