C++类对象和指针的区别
📅 发表于 2017/12/26
🔄 更新于 2017/12/26
👁️ 次访问
📝 0 字
⏳ 0 分钟
cpp
#cpp
#指针,对象,引用
类
class Test{
public:
int a;
Test(){
a = 1;
}
};
类指针
void test1() {
// 1. 两个类的指针,使用了new
Test* t1 = new Test();
t1->a = 10;
Test* t2 = new Test();
t2->a = 5;
// 2. 两个指针的所指向的地址不一样
cout << "&t1:" << t1 << " a = " << t1->a << endl;
cout << "&t2:" << t2 << " a = " << t2->a <<endl;
// 3. 指针t1的值赋值给了t2,两个指针指向的地址相同,都是t1的地址
t2 = t1;
cout << "&t1:" << t1 << " a = " << t1->a << endl;
cout << "&t2:" << t2 << " a = " << t2->a <<endl;
t1->a = 111;
t2->a = 222;
// 4. 修改了同样的地方,输出为222
cout << "&t1:" << t1 << " a = " << t1->a << endl;
cout << "&t2:" << t2 << " a = " << t2->a <<endl;
}
类对象
void test2() {
// 1. 两个类对象
Test t1;
t1.a = 10;
Test t2;
t2.a = 5;
// 2. 对象的内容不一样
cout << "&t1:" << &t1 << " a = " << t1.a << endl;
cout << "&t2:" << &t2 << " a = " << t2.a <<endl;
// 3. 把t1对象的内容赋值给t2。t2的内容和t1相同
t2 = t1;
cout << "&t1:" << &t1 << " a = " << t1.a << endl;
cout << "&t2:" << &t2 << " a = " << t2.a <<endl;
// 4. 再分别修改两个不同的对象,输出分别为111, 222
t1.a = 111;
t2.a = 222;
cout << "&t1:" << &t1 << " a = " << t1.a << endl;
cout << "&t2:" << &t2 << " a = " << t2.a <<endl;
}
类指针 | 类对象 | |
---|---|---|
内存分配 | 定义类指针,不分配内存 | 定义类对象,分配内存 |
关系 | 内存地址,指向类对象。利用构造函数分配一块内存 | |
访问 | 间接访问 | 直接访问 |
多态 | 实现多态,父类指针调用子类对象 | 不能实现多态,声明即调用构造函数,已分配内存 |
堆栈 | 内存堆,永久变量,手动释放,new-delete搭配 | 内存栈,局部临时变量 |
new的对象在堆中 | 在栈中 | |
使用 | new: S* s = new S() , s->name | 声明即可: S s; ,s.name |
生命期 | 需要delete | 类的析构函数来释放空间 |
传参 | 指针4个字节 | 对象,参数传递资源占用太大 |
虚函数f | 调用分配给它空间时那种类的func | 调用自己的func |
其它 | 父类指针指向子类对象 |
推荐使用const &引用
,安全系数高。