C++:类 & 对象

类成员函数

就是定义与原型写在类里面的函数,能操作类的所有对象中的所有成员

class Box { 
    public: 
        double length;              // 长度 
        double breadth;             // 宽度 
        double height;              // 高度 
        double getHeight();     //类中定义的所有成员函数都是内联的
        double getVolume() { 
            return length * breadth * height; 
        } 
};

 也可以在类外部定义类成员函数,但得使用范围解析运算符 ::

double Box::getHeight() { 
    return height; 
}

 

类访问修饰符

就是public、private、protected

成员和类的默认访问修饰符是private。

  • public成员(就不提了)
  • private成员

类自己与友元函数才能访问。

class Box{
   double width;         //默认是private,类以外就无法访问了
   public:
      double length;    //类内类外都可以通过成员变量+ . + length调用。
};
  • protected成员

子类也能访问

class Box{
   protected double width;             //子类可以访问
};
class BoxSon : Box{                    //不写就是private继承
    public:
        double getParentWidth(void);   //声明
};
double BoxSon::getParentWidth(void) {  //外部定义
    return width;                      //父类的protected成员,在Box类是private
}

构造函数 & 析构函数

  • 构造函数(无参 or 带参)

概念跟java里的差不多,不返回任何类型(包括void),一般用来初始化成员变量,可以在外部用Box::box( ...){...}定义。

使用初始化列表来初始化字段

Box::box( double wid, double hei ): height(hei), width(wid) {
   ...
}//注意,这里初始化顺序是按照声明顺序来的,即width=wid 先执行。(声明与初始化同步是个好习惯)

等价于:

Box::box( double wid ): { 
    width=wid; 
    height=hei;
    ...
}
  • 析构函数

在属于当前类的对象被删除的时候执行,与构造函数同名,没有参数也不返回任何值。

一般用于在跳出程序(比如关闭文件,释放内存等)前释放资源。

 

class Line {
   public:
      void setLength( double len );
      Line();   // 这是构造函数声明
      ~Line();  // 这是析构函数声明
};
  • 拷贝构造函数(有点复杂后面再看)

三种场景会调用此函数:

  1. 用一个对象初始化同类型的另一个对象,拷贝此对象。Line line2 = line1
  2. 当对象作为参数被传递给函数时,拷贝此对象;func(Line line)
  3. 当一个函数返回的是某个对象时,拷贝此对象。func(){return line}

场景结束后,会析构掉拷贝出来的对象。

  • 友元函数

定义在类外部(声明在内部),能访问类中private与protected成员(但它不是成员函数)。

友元类

友元类的所有成员都是另一个类的友元,只需要在这个类的定义中声明:

class A{
    friend class B;
}

那么B能访问A的任何成员,但是反过来不行!!!

  • inline函数(内联)

很简单的小体积函数,编译时编译器会把函数体挪到调用它的地方,少了调用时间,增

加了空间成本。

  • this指针

this代表某对象的指针,例如:

Class B{
public:
	int long;
	int getLong(B b){
		return this->long;    //this代表调用getLong()方法的B对象的指针。
	}
}
  • 静态成员

1. 静态成员变量

在类的所有实例中只有一个副本,即实例们共享这一个变量,实例对此变量的修改会被同步。必须在类外用::定义(即分配内存,但是可以不初始化-即赋值);

int Box::objectCount = 0;//也可以不写 =0

2. 静态成员函数

只能访问静态成员 + 类外部其他函数。

类外通过::访问(类似于java)

Box::getCount();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值