重拾c++第四天(8):对象和类

1、类示例:

class Human{
//private:这是默认的
    数据;
    方法;
public:
    数据;
    方法
}

一般会在private中存储私有数据和私有方法,然后在公有方法中对私有数据进行操作

2、可以在类中只写申明,之后定义类中函数:

例如函数为age_compute

void Human::age_compute(int age){
    ...
}

//这样能通过编译,可以在void前加inline变成内联函数

下面是一个例子:

//作者:王陸    出处:http://www.cnblogs.com/wkfvawl/
#include <iostream>
using namespace std;
class Point
{
public:
    void setPoint(int x, int y) //实现setPoint函数
    {
        xPos = x;
        yPos = y;
    }
    void printPoint() ;//实现printPoint函数

private:
    int xPos;
    int yPos;
};
inline void Point::printPoint()
{
    cout<< "x = " << xPos << endl;
    cout<< "y = " << yPos << endl;
}

int main()
{
    Point M; //用定义好的类创建一个对象 点M
    M.setPoint(10, 20); //设置 M点 的x,y值
    M.printPoint(); //输出 M点 的信息
    return 0;
}

3、构造函数帮助实现类初始化:

#include <iostream>
using namespace std;
class Point
{
public:
  Point();//默认构造函数,设定默认值
  Point(int xPos,int yPos);//带参数定义构造函数 
  void printPoint() ;//实现printPoint函数
private:
  int xPos_;
  int yPos_;
};

Point::Point(){
  xPos_ = 0;
  yPos_ = 0;
}

Point::Point(int xPos,int yPos) {
  xPos_ = xPos;
  yPos_ = yPos;
}

void Point::printPoint()
{
  cout<< "x = " << xPos_ << endl;
  cout<< "y = " << yPos_ << endl;
}

int main()
{
  Point M; //用定义好的类创建一个对象 点M
  M.printPoint(); //输出M点的信息
  return 0;
}

4、析构函数:

类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。

析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。

~Point();  // 这是析构函数声明

Point::~Point() 
{
  cout<<"bye"<<endl;
}

5、运算符重载(以+为例):

类名 operator运算符(const 类名&);
例子:
Box operator+(const Box& b)
{
      Box box;
      box.length = this->length + b.length;
      box.breadth = this->breadth + b.breadth;
      box.height = this->height + b.height;
      return box;
}
//这是定义在类中的,this代表当前对象,使之引用到其值(一般是private值)
//一般在public里

后面直接Box3 = Box1 + Box2;得到新对象

6、友元函数(解决非成员函数,即类外函数,无法访问private数据的问题),友元也可用在运算符重载中

//类与类之间的友元关系不能被继承
//友元函数的类内声明:
//friend void 方法名(const 类名& 函数中用到的类名, 其他变量);
//而后正常定义函数就行

//友元类可以访问该类任何成员
//friend class BigBox;
//而后正常定义类就行

7、类继承(A继承B)

class A:public B{
public:
    //新的构造函数
    //添加方法
private:
    //添加变量
};

// 构造函数实现  A的变量中包含B的变量
A::A(A的变量) : B(B的变量)
{
  //函数主体
}

 8、protected对外界等价于private,对子类来说属于public

 9、抽象基类

抽象基类不能直接创建对象,const表示不能修改数据成员,一般加在=0前面,类中出现纯虚函数即为抽象基类

纯虚函数定义如下:

virtual <函数返回类型说明符> <函数名>(<参数表>)=0; 

纯虚函数必须被子类实现,否则会编译报错

10、私有继承下所有成员变成子类私有成员

11、typedef 模板类

所谓类模板,实际上是建立一个通用类,其数据成员、成员函数的返回值类型和形参类型不具体指定,用一个虚拟的类型来代表。使用类模板定义对象时,系统会实参的类型来取代类模板中虚拟类型从而实现了不同类的功能。

具体参考:https://blog.csdn.net/low5252/article/details/94654468

猜你喜欢

转载自www.cnblogs.com/dai-yu/p/12203221.html