注册 登录
编程论坛 C++教室

简单的内存问题

lc1234 发布于 2009-10-13 21:31, 428 次点击
#include <iostream>
using namespace std;

class Father{
    int i;
public:
    int j;
    Father(){}
    Father(int m,int n){
        i = m;
        j = n;
    }
     void fun(){
        cout<<"Father::fun()"<<endl;
    }

};
class Son : public Father{
public:
    Son(){}
    void fun(){
        cout<<"Son::fun()"<<endl;
    }
};
void main(){
    Father* f = new Son;  //这样写肯定没错
    f->fun(); //调的是Father的
   
    Son s = new Son;//为什么是错的,它返回的是Son*,但我不明白为什么返回的是Son*,难道分配内存的时候是以    指针的形式分配的?请高手指教指教!

   
}
4 回复
#2
shl3052009-10-13 21:42
new Son 是在内存中分配一块空间用来存储一个Son对象,同时返回一个指针,这个指针就指向那块内存
#3
最左边那个2009-10-14 12:19

new操作符是用来动态分配存储空间的!说到存储空间,必然会联想到空间的地址。那么这个空间的地址是什么呢?这时候就应该像下面:
Son *s = new Son
注意,这里一定是指针类型,表示放地址的。
所以,在你的代码中Son s = new Son这样写是不正确的,编译器会给你报错!
#4
东海一鱼2009-10-14 14:55
在一个函数中,Son S代表在‘栈’中分配一个对象。

Son* S代表要只在‘栈’中分配一个对象指针。而这个指针指向的对象是用new操作在一个‘堆’上分配的。
#5
newCpp2009-10-14 18:07
楼上面说的都够全面的了!!

#include <iostream>
using namespace std;
 
class Father{
    int i;
public:
    int j;
    Father(){}
    Father(int m,int n){
        i = m;
        j = n;
    }
     void fun(){
        cout<<"Father::fun()"<<endl;
    }
 
};
class Son : public Father{
public:
    Son(){}
    void fun(){
        cout<<"Son::fun()"<<endl;
    }
};
void main(){
    Son f;  //这样写肯定没错
    f.fun(); //调的是Father的
     
    Son s;//为什么是错的,它返回的是Son*,但我不明白为什么返回的是Son*,难道分配内存的时候是以    指针的形式分配的?请高手指教指教!
 
}
1