C++程序设计入门(上) 之对象和类

面向对象编程:

如何定义对象?  同类型对象用一 个通用的类来定义

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

 

posted @ 2019-04-09 17:41  晴天要下雨  阅读(363)  评论(0编辑  收藏  举报