菜鸟提问:用对象的指针有什么好处?哪些场合需要用new哪些不需要
初学者提问:用对象的指针有什么好处?哪些场合需要用new哪些不需要?
初学C++,问得比较浅,大家别笑话我,但这两个问题自己没想明白
1)用对象的指针有什么好处?
假设A是我自定义的类
A a;
A *pa;
在什么场合,用指针A *更好呢?难道用a不是能一样访问A的所有成员变量和函数吗?而且a.x比pa->x更简洁。
2)哪些场合需要用new哪些不需要?
用了new,则一定要用delete,否则引起内存泄露。
那我不用new创建的对象,系统会自动回收内存吗?
如果是这样,之所以还要用new + delete,一定是它有某种好处对吗?
好处何在呢。
------解决方案--------------------
#include<iostream.h>
class M
{
int x,y;
public:
M(){x=y=0;}
M(int i,int j){x=i;y=j;}
void setxy(int i,int j){x=i;y=j;}
void copy(M *m);
void print();
};
void M::copy (M*m)
{x=m->x ;y=m->y ;}
void fun(M m1,M *m2,M &m3)
{
m1.setxy (10,20);
m2->setxy (11,22);
m3.setxy (1,2);
}
void M::print()
{cout<<"x="<<x<<"y="<<y<<endl;}
void main()
{ M mp(3,9),mq(33,44),mr;
cout<<"mp:";mp.print();
cout<<"mq:";mq.print();
mr.copy (&mp);
cout<<"mr:";mr.print();
fun(mp,&mq,mr);
cout<<"mp:";mp.print();
cout<<"mq:";mq.print();
cout<<"mr:";mr.print();
}关于第一个问题请楼主把这个程序自己上级调试,体会!只有在程序中才能说的清楚那个问题
------解决方案--------------------
c++中的多态是靠 什么实现的????
指针和引用
指针没有自动回收怎么办????
智能指针(句柄)
楼主 可以上网搜索 或者 找本书看看
------解决方案--------------------
如下程序:
初学C++,问得比较浅,大家别笑话我,但这两个问题自己没想明白
1)用对象的指针有什么好处?
假设A是我自定义的类
A a;
A *pa;
在什么场合,用指针A *更好呢?难道用a不是能一样访问A的所有成员变量和函数吗?而且a.x比pa->x更简洁。
2)哪些场合需要用new哪些不需要?
用了new,则一定要用delete,否则引起内存泄露。
那我不用new创建的对象,系统会自动回收内存吗?
如果是这样,之所以还要用new + delete,一定是它有某种好处对吗?
好处何在呢。
------解决方案--------------------
#include<iostream.h>
class M
{
int x,y;
public:
M(){x=y=0;}
M(int i,int j){x=i;y=j;}
void setxy(int i,int j){x=i;y=j;}
void copy(M *m);
void print();
};
void M::copy (M*m)
{x=m->x ;y=m->y ;}
void fun(M m1,M *m2,M &m3)
{
m1.setxy (10,20);
m2->setxy (11,22);
m3.setxy (1,2);
}
void M::print()
{cout<<"x="<<x<<"y="<<y<<endl;}
void main()
{ M mp(3,9),mq(33,44),mr;
cout<<"mp:";mp.print();
cout<<"mq:";mq.print();
mr.copy (&mp);
cout<<"mr:";mr.print();
fun(mp,&mq,mr);
cout<<"mp:";mp.print();
cout<<"mq:";mq.print();
cout<<"mr:";mr.print();
}关于第一个问题请楼主把这个程序自己上级调试,体会!只有在程序中才能说的清楚那个问题
------解决方案--------------------
c++中的多态是靠 什么实现的????
指针和引用
指针没有自动回收怎么办????
智能指针(句柄)
楼主 可以上网搜索 或者 找本书看看
------解决方案--------------------
如下程序:
- C/C++ code
#include <iostream> #include <string> using namespace std; class Student { public: static int number; string name; public: Student() { } void set(string str) { name = str; number++; // 调用静态数据成员 } void print() // 态成员函数 print() { std::cout < < name < <" : The number of the students is " < < number < < " numbers." < < std::endl; // 调用静态数据成员 } }; int Student::number = 0; // 静态数据成员初始化 int main(int argc, char** argv) { Student* s1; s1 = new Student(); s1->set("111"); Student s2; s2.set("222"); s1->print(); s2.print(); return 0; }
------解决方案--------------------
针对具体情况而言。
比如我写过一个简单dos版本三国杀,里面有很多卡牌,每个卡牌存储一些信息(如卡牌数值、卡牌名字等)。在运行时,卡牌堆会减少,但是不会消失,一直到程序结束才消失。很明显,这么多卡牌用new来创建更好,否则,就要花很多时间和空间来完成卡牌的创建和删除,降低效率。
相对而言,对象sizeof比较小,而且不是一直要用,这样不用new更好。
------解决方案--------------------
(1)学了多态就知道对象指针了,还有抽象类不能产生对象的你怎么去用对象去点?
(2)还是指针的用处,堆、栈存储的概念和差别!自己看看这方面书吧!!!