C++笔记 | 第3课 类

C++笔记 | 第3课 类

类(class)

类是将数据和相应对这些数据的操作函数进行封装,并设置访问权限。class不同于structunionstructunion是纯数据类型,但不包括函数(操作)

类是对象的抽象,而对象是类的实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板 (模子)。

类可以继承和派生,并引出了访问权限控制和调整、保护成员、成员函数名静态和动态束定(虚函数)等一系列问题。

//类 举例
class Date
{
   
public:
    //可以把成员函数直接在类说明中定义,这样成员函数若符合条件,将自动成为内联函数
    void set(int d, int m, int y)
        {
    day=d; month=m; year = y; }
    int isLeapYear()
        {
    return(year%4==0 && year%100!=0) || (year%400==0);}
    void display()
        {
    cout <<month<< ":"<<day<< ":"<<year<<endl; }
private:
    int day, month, year;
};

构造函数(constructor)和析构函数(destructor)

类建立后往往需要初始化。

构造函数是与类同名的成员函数。

没有定义构造函数编译器会自动生成一个构造函数(公有构造函数)。

与类同名带前缀~的成员函数被称为是析构函数。

构造函数/析构函数不能在程序中显式地直接被调用,而是在对象创建和撤消时隐式地自动被调用。

构造函数可以多个同名(函数重载),以达到各种初始化的目的。

可以把构造函数改写成带缺省参数的函数:如Myclass(int i=0);
可以由缺省值构造函数代替转换构造函数

同名的构造函数必须在类的public声明中逐个列出——如果想定义对象而不赋初值,必须再加一个无参构造函数。(用new申请某一个类的动态对象数组时,在该类中必须能够匹配到没有形参的或缺省参数的构造函数)

构造函数/析构函数没有返回类型。

析构函数执行顺序与构造函数执行顺序相反,一一对应。

class Circle
{
   
public:
    Circle(double x = 0, double y = 0, double r = 0) : x_(x), y_(y), r_(r) {
    cout << "Circle(double, double, double) called\n"; }// :x_(x) 的写法效率高一些
    ~Circle() {
    cout << "~Circle() called\n"; }

    void xSetValue(double x) {
    x_ = x; }
    void ySetValue(double y) {
    y_ =y; }
    void rSetValue(double r) {
    r_ = r; }

    void display() const
    {
   
        cout << "O(" << x_ << ',' << y_ << ")" << '\t' << "radius=" << r_ <<endl;
    }
    void getArea() const
    {
   
        cout << "area=" << 3.14 * r_ * r_ <<endl;
    }

private:
    double x_;
    double y_;
    double r_;
};

内联构造函数

可以通过说明时把构造函数体直接放在类内,使之成为内联构造函数。符合内联函数的限制条件的类的构造函数体或成员函数体放在类内,该函数将自动成为内联函数. 目的:提高执行效率.

在类外可以通过在类的成员函数前加inline,使之成为内联构造函数

//类中
public:
Myclass(int i=0);

// 类外函数定义
inline Myclass::Myclass(int i) 
{
    
    
    cout << "Constructor called. "<<i <<endl; 
}

复制构造函数

复制(拷贝)构造函数是一种特殊的构造函数,其形参只有一个且是本类对象的引用。

作用是:使用一个已经存在的对象(由复制构造函数的参数指定),去构造并初始化同类的一个新对象。

class Point
{
   
public:
	Point(int x = 0, int y = 0):x_(x),y_(y){
   }
	Point(Point &p):x_(p.x_)<
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值