Coursera C++程序设计——第三周笔记(3)

第四课——友元

  • 友元函数
  • 友元类

(1)友元函数:一个类的友元函数可以访问该类的私有成员;

class CCar
{
  private:
    int price;
  friend int MostExpensiveCar( CCar cars[], int total);   //声明友元
};

除了可以将普通函数定义为一个类的友元函数外,还可以将一个类的成员函数(包括构造、析构函数)定义为另一个类的友元函数。

class B
{
  public:
    void function();
};

class A
{
  friend void B::function();
};

(2)友元类:A是B的友元类,则A的成员函数可以访问B的私有成员。

class CCar
{
  private:
    int price;
  friend class CDriver;   //声明CDriver为友元类
};

注意:友元类的关系不能传递,也不能继承;

第五课——this指针

非静态成员函数中,直接用this代表指向该函数作用的对象的指针。

class Complex
{
  public:
    double real, imag;
    void Print()
    {
      cout<<real<<","<<imag<<endl;
    }
    Complex(double r, double i):real(r),imag(i){}
    
    Complex AddOne()
    {
      this->real++;      //等价于real++
      this->Print();     //等价于Print
      return *this;
    }
};

注意:静态成员函数中不能使用this指针!(因为静态成员函数并不具体作用于某个对象)

第六课——常量对象、常量成员函数和常引用

常量对象:不希望该对象的值被改变,则定义为常量对象。

class Demo
{
  private:
    int value;
  public:
    void SetValue(){}
};

const Demo Obj;    //常量对象

常量成员函数:执行期间不应修改其所作用的对象。在常量成员函数中不能修改成员变量的值(静态成员变量除外),也不能调用同类的非常量成员函数(静态成员函数除外)。

class Sample
{
  public:
    int value;
    void GetValue() const;
    void func() {};
    Sample(){};
};

void Sample::GEtValue()
{
  value = 0;   //wrong
  func();      //wrong
}

常量成员函数的重载:两个成员函数,名字和参数表都一样,但是一个是const,一个不是,属于重载。

class CTest
{
  private:
    int n;
  public:
    CTest() { n = 1;}
    int GetValue() const { return n;}
    int GetValue() {return 2*n;}
};

int main()
{
  const CTest objTest1;
  CTest objTest2;
  cout<<objTest1.GetValue()<<","<<objTest2.GetValue();    //objTest1调用常量成员函数,objTest2调用普通成员函数
  retutn 0;
}

常引用:引用前加关键字const成为常引用。不能通过常引用改变引用的变量。

用法:对象作为函数的参数时,生成该参数需要调用复制构造函数,效率低下。用指针作为参数,代码不好看。可以用对象的引用作为参数。但是这样可能爱函数中改变对象的值,则可以用常引用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值