#### 什么是类 ####
定义一个类,本质上是定义一个数据类型的蓝图。实际上并没有定义任何数据,其实是定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作。类定义是以关键字 class 开头,后跟类的名称。类的主体是包含在一对花括号中>。类定义后必须跟着一个分号或一个声明列表:
class 类名{成员变量 成员函数声明};
#### 什么是对象 ####
类提供了对象的蓝图,所以基本上,对象是根据类来创建的。声明类的对象,就像声明基本类型的变量一样:
类名 对象名;
#### 类的构成 ####
1,数据成员(data mumber)/成员变量/属性 :对象内部数据和状态,只能在类定义中声明>,可以在成员函数中直接调用
2,成员函数/方法 : 对象相关的操作,可以在类内实现或类外实现
#### 限定符 ####
private(默认):私有
public:公共
protected:保护
注意:在实践中,成员变量多数情况使用private和protected,成员函数多数使用public。
通常,通过成员函数改变对象的成员变量。
源代码:Complex.cpp
#include <iostream>
using namespace std;
class Complex{ //定义类
private: //限定符的使用
double real;
double imag;
public:
void Init(double r,double i) //类中成员函数
{
real = r;
imag = i;
}
void Plus(Complex other)
{
real += other.real;
imag += other.imag;
}
void Print()
{
cout << real;
if(imag != 0)
{
cout << showpos << imag << "i" << noshowpos;
}
cout << endl;
}
};
int main()
{
Complex num; //实例化对象
num.Init(10,20);
Complex num1;
num1.Init(2,3);
num.Plus(num1);
num.Print();
}
#### 类定义与类实现分离 ####
1,头文件(.h)
作用:定义类,类成员变量,声明成员函数等
方式:#pragma once 或者#ifndef \n #define 识别符 ...... #endif (防止二次编译)
2,源文件(.cpp)
作用:实现成员函数定义
方式:#include "头文件名"
实例1:
1,头文件 (Complex.h)
#pragma once
#include <iostream>
class Complex{ //定义类,类名Complex
private: //限定符:标示以下成员变量私有
double real; //定义类成员变量
double imag;
public: //限定符号:标示以下函数声明共有
void Init(double r,double i); //函数声明
void Plus(Complex other);
void Print();
};
2,源代码 (Complex.cpp)
#include <iostream>
#include "Complex.h" //添加头文件
using namespace std;
void Complex::Init(double r,double i) //函数定义;Complex:: 标示该函数属于类Complex
{
real = r;
imag = i;
}
void Complex::Plus(Complex other)
{
real += other.real;
imag += other.imag;
}
void Complex::Print()
{
cout << real;
if (imag != 0)
{
cout << showpos << imag << "i" << noshowpos;
}
cout << endl;
}
3,测试代码 (test.cpp)
#include <iostream>
#include "Complex.h"
int main()
{
Complex num; //实例化对象
num.Init(2,4);
Complex num1;
num1.Init(1,-6);
num.Plus(num1);
num.Print();
return 0;
}
确保上面三个文件在同一目录下;执行:
g++ Complex.cpp test.cpp -o Complex
./Complex
结果显示:
3-2i
实例2:
1,头文件:BillTest.h
#pragma once
#include <string>
using std::string;
class Bill{
private:
string name;
double price;
int num;
public:
void Init(string n,double p,int c);
void Print();
double GetDisscount();
};
2,源代码:BillTest.cpp
#include <iostream>
#include "BillTest.h"
using namespace std;
void Bill::Init(string n,double p,int c)
{
name = n;
price = p;
num = c;
}
void Bill::Print()
{
cout << "name:" << "\t" << name << endl;
cout << "price:" << "\t" << price << endl;
cout << "num:" << "\t" << num << endl;
}
double Bill::GetDisscount()
{
return price*num;
}
3,测试代码:test.cpp
#include <iostream>
#include "BillTest.h"
using namespace std;
int main()
{
Bill g1;
g1.Init("apple",2.01,7);
g1.Print();
double dis;
dis = g1.GetDisscount();
cout << "Disscount:" << "\t" << dis << endl;
return 0;
}
确保上面三个文件在同一目录下;执行:
g++ BillTest.cpp test.cpp -o BillTest
./BillTest
结果显示:
name: apple
price: 2.01
num: 7
Disscount: 14.07