Skip to content

C++类对象和指针的区别

📅 发表于 2017/12/26
🔄 更新于 2017/12/26
👁️ 次访问
📝 0 字
0 分钟
cpp
#cpp
#指针,对象,引用

类对象和指针的区别

类对象和指针

代码

c++
class Test{
  public:
      int a;
      Test(){
          a = 1;
      }
};

类指针

c++
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;
}

类对象

c++
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 &引用,安全系数高。

总访客数:   ·   总访问量:
PLM's Blog @ 2016 - 2025