类1

构造函数

构造函数的名字必须与类名相同。

构造函数没有返回类型--包括void类型

在创建对象时,构造函数就被调用,它的作用就是初始化对象

#include <iostream>
const double PI = 3.14159;
using namespace std;

class Circle{
public:
    double radious;
public:
    Circle(){
        radious = 1;
    }

    Circle(double newRadious){
        radious = newRadious;
    }

    double getArea(){
        return radious*radious*PI;
    }
};

int main(){
    Circle c1;
    Circle c2(2);
    cout<<c1.radious<<" "<<c1.getArea()<<endl;
    cout<<c2.radious<<" "<<c2.getArea()<<endl;

    return 0;
}<span style="color:#ff0000;">
</span>
C++和java一样在给属性进行赋值的时候都必须要写在构造函数里面


数据域的封装

上述代码中radious数据域可以在主函数里直接修改,例如c1.radious = 5;这不是一个好的编程习惯。原因有二

1.首先,数据可能会被搞乱

2.其次,这种方式会使类难以维护,容易出现bug。

为防止客户程序直接修改类的属性,我们应该使用private关键字,将数据域声明为私有的,这就是所谓的数据域封装。

class Circle{
private:
    double radious;
public:
    Circle();
};
如果一个数据域是私有的,那么在类之外的程序中,无法通过直接饮用类对象来访问它。但客户程序尝尝需要提取,修改数据域。为了使私有数据域可以被访问,可定义一个成员函数get返回数据的值。为使私有数据域可以被修改,可提供一个成员函数set为数据域设置新值。


get函数具有如下的函数签名

returnType getPropertyName()

set:

public void setPropertyName(dataType propertyValue)

#include <iostream>
const double PI = 3.14159;
using namespace std;

/*class Circle{
public:
    double radious;
public:
    Circle(){
        radious = 1;
    }

    Circle(double newRadious){
        radious = newRadious;
    }

    double getArea(){
        return radious*radious*PI;
    }
};

int main(){
    Circle c1;
    Circle c2(2);
    cout<<c1.radious<<" "<<c1.getArea()<<endl;
    cout<<c2.radious<<" "<<c2.getArea()<<endl;

    return 0;
}

class Circle{
private:
    double radious;
public:

};*/

class Circle{
private:
    double radious;
public:
    Circle(double newRadious){
        radious = newRadious;
    }
    void setRadious(double newRadious){
        radious = (newRadious >= 0)? newRadious:0;
    }
    double getArea(){
        return radious*radious*PI;
    }
    double getradious(){
        return radious;
    }
};

int main(){
    Circle c1(5);
    cout<<c1.getArea()<<endl;
    c1.setRadious(5);
    //cout<<c1.radious<<endl;//因为是private所以不能直接访问,所以要先获取
    cout<<c1.getradious()<<endl;

    return 0;
}

变量变为private后,不能直接在主函数里对其进行操作,一定要用成员函数set或者get对其进行操作。set是对其进行重新赋值,get是获取属性值。但是在JAVA中却可以。即在java中可以不需要用成员函数对其进行取值或者是重新赋值。


在堆栈中创建动态对象

当在一个函数中声明一个Circle对象时,对象是创建在栈中的。当函数返回时,对象会被销毁,为保留对象,我们可以使用new操作符在堆中动态创建对象。java中的对象是创建在堆中的

当程序结束时,动态对象会被销毁,也可以使用关键字delete显式销毁对象这个销毁时直接从内存中销毁,跟析构函数不一样,析构函数不能直接从内存中销毁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值