对象和对象指针以及对象引用的使用

如下程序: 

#include <iostream> 
#include <string> 
using namespace std; 

class M;  //向编译系统声明,M类在整个源程序内已经定义


class Student 

    public: 
    static int number; 
    string name; 

    M & rm;     //M类的对象引用rm作为student类的公有数据成员;

    M *pm;      //M类的对象指针pm作为student类的共有成员;

public: 
    Student() { } 

    void set(string str) 
    { 
       name = str; 
        number++; // 调用静态数据成员 
    } 

    void print() 
    { 
       cout << name <<" : The number of the students is " << number << " numbers." << endl; // 调用静态数据成员 
    } 
}; 

class M{

   public:

    int  score;

    M(int v){ score=v;} //M类的有参构造函数

    M(){ score=0}   //M类的无参构造函数

    int getValue(void){return score;} 

}

int Student::number = 0; // 静态数据成员初始化方式

int main(int argc, char** argv) 

    M m1(6);
    Student* s1; 
    s1 = new Student(); 
    s1->set("111"); 

    Student s2; 
    s2.set("222"); 


    s1->print(); 
    s2.print(); 

    s2.pm=&m1;//对象s2的对象指针成员pm指向m1。请注意s2是Student类的对象,pm是M类的对象指针作为Student类的成员,m1是M类对象

     cout<<s2.pm->score<<endl;//s2对象访问数据成员score的方式,只有将m1的地址赋给了对象s2的对象指针成员pm之后,并且score是M类的公有数据成员时才能顺利打开这条访问的消息通路

    return 0; 

      类对象和指针的作用都是为了调用类的成员变量和成员函数用的,当希望明确使用该类的时候最好使用对象,当希望利用C++的多态性,实现动态绑定,则需要使用指针或引用(如父类指针可以指向子类对象,并且没有调用构造函数),类的对象则不行。

一、关于定义:
       对于类student ,定义了一个对象 和一个指针。类的对象在定义时利用构造函数在内存中分配一块内存(包括一些成员变量所赋的值);类的指针是一个内存地址值,他指向内存中存放的类对象(包括一些成员变量所赋的值)。很关键一点,在定义对象实例时分配内存;在定义类指针时则未分配对象所需内存(在未用new操作符时)。

二、关于应用:   

        1.访问成员:   对象用"."操作符;   指针用" ->"操作符.   
        2.生命期:      若是成员变量,则是类的析构函数来释放空间;若是函数中的临时变量,则作用域是该函数体内。而指针,则需利用delete在相应的地方释放分配的内存块.   注意:用new,一定要delete

        3.内存分配:类的对象在栈空间中分配,是个局部的临时变量。类的指针在堆空间中分配,是个永久变量,除非你释放它。 

        4.虚函数的调用:当基类有虚函数,Func是它的一个虚函数,则调用Func时:  类对象调用的是它自己的Func;   类指针调用的是分配给它空间类的Func。

        5.一个类的对象不能作为该类的成员,但一个类的对象指针或者对象应用却可以作为自身类的成员,从而构成递归类。

总结指针或引用的优点有: 

     第一,实现多态;

     第二,在函数调用,传指针参数。不管你的对象或结构参数多么庞大,用指针,传过去的就是4个字节,如果用对象,参数传递占用的资源就很大。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值