面向对象编程:
如何定义对象? 同类型对象用一 个通用的类来定义
class C { int p; int f(); }; C ca, cb;
一个类用变量来定义数据域,用函数定义行为。
class Cirle { public: double r; Cirle() { r = 1; } Cirle(double newr){ r = newr; } double get() { return r * r *3.14; } };
构造函数:
类中有 一种特殊的“构造函数”,在创建对象时被自动调用。(通常用来初始化类)
Constructors:
Initialize objects (构造函数:初始化对象)
Has the same name as the defining class (与类同名)
NO return value (including "void"); (无返回值)
constructors can be overloaded (可重载)
may be no arguments (可不带参数)
类可不声明构造函数,编译器会提供一个带有空函数体的无参构造函数。
用类创建对象:
ClassName objectName; eg:Circle circle1;
ClassName objectName(arguments); eg:Circle circle2(5.5);
对象访问运算符(.):
objectName.dataField // 访问对象的数据域
objectName.function(arguments) // 调用 对象的一个函数
eg:circle1.radius = 10;
int area = circle1.getArea();
类似于结构体的使用方法。但当问数据域的时候,类的数据域必须是共有属性。
#include<iostream> #include<algorithm> #include<cmath> using namespace std; class Cirle { public: double r; Cirle() { r = 1; } Cirle(double newr){ r = newr; } double get() { return r * r *3.14; } }; int main() { Cirle a; Cirle b(2.0); cout << a.get() << endl; cout << b.get() << endl; return 0; }
对象指针与动态对象:
Circle circle1; Circle *pCircle = &circle1; cout << "The radius is " << (*pCircle).radius << endl; cout << "The area is " << (*pCircle).getArea() << endl; (*pCircle).radius = 5.5; cout << "The radius is " << pCircle->radius << endl; cout << "The area is " << pCircle->getArea() << endl;
在堆中创建对象:
在函数中声明的对象都 在栈上创建,函数返回, 则对象被销毁。
为保留对象,你可以用new运算符在堆上创建它。
ClassName *pObject = new ClassName(); //用无参构造函数创建对象 ClassName *pObject = new ClassName(arguments); //用有参构造函数创建对象 Circle *pCircle1 = new Circle(); //用无参构造函数创建对象 Circle *pCircle2 = new Circle(5.9); //用有参构造函数创建对象 //程序结束时,动态对象会被销毁,或者 delete pObject; //用delete显式销毁
数据域封装:
数据域采用public的形式有2个问题
1.数据会被类外 的方法篡改
2.使得类难 于维护,易出现bug