cpp的类

cpp的类

访问的权限public/private/ptocted

public 任意用户都可以访问
private 私用的
protected 保护的数据类型

构造函数(各种类型的构造函数)

主要目的:
    构造函数提供了对象参数初始化的方法

特点和其他语言类似。

有参数的构造函数必须同时声明成员对象,父类的构造函数

构造函数的顺序:
    父类[按照声明顺序]
    成员对象[按照声明顺序]
    自己的构造函数

析构函数

没有返回参数和参数列表
不能重载
系统自动调用不能显示调用
应该是公有的
析构函数的顺序和初始化的顺序相反

复制构造函数

拷贝函数调用的情况:
    1) 一个对象作为函数参数,以值传递的方式传入函数体;
    2) 一个对象作为函数返回值,以值传递的方式从函数返回;
    3) 一个对象用于给另外一个对象进行初始化; 


复制构造函数需要注意点
    ①对于凡是包含动态分配成员或包含指针成员的类都应该提供拷贝构造函数;
    ②在提供拷贝构造函数的同时,还应该考虑重载"="赋值操作符号。

拷贝构造函数必须以引用的形式传递(参数为引用值)。其原因如下:
    当一个对象以传递值的方式传一个函数的时候,拷贝构造函数自动的被调用来生成函数中的对象。
    如果一个对象是被传入自己的拷贝构造函数,它的拷贝构造函数将会被调用来拷贝这个对象这样复制才可以传入它自己的拷贝构造函数,

 析构函数没有参数,也没有返回值,而且不能重载,在一个类中只能有一个析构函数。     

需要注意重载运算符,下一章咱们说明

this指针

尽管在成员函数内部显式引用 this 通常是不必要的,但有一种情况下必须这样做:

    当我们需要将一个对象作为整体引用而不是引用对象的一个成员时。
    不能从 const 成员函数返回指向类对象的普通引用。const 成员函数只能返回 *this 作为一个 const 引用。

sizeof用于类

可以计算类占用的空间
//
//  main.cpp
//  use_object_more
//
//  Created by bikang on 16/10/21.
//  Copyright (c) 2016年 bikang. All rights reserved.
//

#include <iostream>
#include "CrawFlag.h"
#include "FileCrawFlag.h"

using namespace std;
//设置坐标位置

class Point{
public:
    Point(double x1,double y1){x=x1;y=y1;}
    Point(){cout << "Point construct"<<endl;}
    ~Point(){cout << "Point destruct"<<endl;}
    double getX(){ return x;}
    double getY(){return y;}
    void setX(double x1){x = x1;};
    void setY(double y1){y = y1;}
private:
    double x,y;
};

class SaMonthor{
    public :
    int age;
    SaMonthor(int age1){age = age1;cout << "SaMonthor Construct"<<endl;}
    SaMonthor(){cout << "SaMonthor Construct"<<endl;}
    ~SaMonthor(){cout << "SaMonthor Construct"<<endl;}
    void showMonterData(){cout << "showData"<<endl;}
};

class SaFather{
public :
    int age;
    SaFather(int age1){age = age1;cout << "SaMonthor Construct"<<endl;}
    SaFather(){cout << "SaFather Construct"<<endl;}
    ~SaFather(){cout << "SaFather Construct"<<endl;}
    void showFathorData(){cout << "showData"<<endl;}
};


class Sa:SaFather,SaMonthor{

public :
    Sa(string a1,int ageF,int ageM);
    Sa(string a1);
    Sa();
    ~Sa();
    string getB();
    void setB();
    string a;
private:
    string b;
    Point p;
protected:
    string c;
};

Sa::Sa(string a1,int ageF,int ageM):a(a1),SaFather(ageF),SaMonthor(ageF){

}

Sa::Sa(string a1):a(a1){

    cout << "sa construct!" << endl;
}
Sa::Sa(){
    cout << "sa construct!" << endl;
}

Sa::~Sa(){
    cout << "sa destruct!" << endl;
}

class Sa2{
public:
    Sa2(string a1)
    {
        a=a1;
        b = new char[20];
        strcpy(b, a.c_str());
        cout << "sa2 construct"<<endl;
    }

    Sa2()
    {
        cout << "sa2 construct"<<endl;
    }

    Sa2(const Sa2 &r)
    {
        b = new char[20];
        a = string(r.a)+"_new";
        strcpy(b, a.c_str());
        cout << "sa2 copy construct"<<endl;
    };

    ~Sa2()
    {
        cout << "sa2 destruct"<<endl;
        //delete b;
    }
    string a;
    char *b;
};

//测试类
void tobject();
//测试拷贝构造函数
void tobjCopy();
void tobjCopy2(Sa2 s);

int main(int argc, const char * argv[]) {
    cout << "start" << endl;
    //tobject();
    tobjCopy();
    return 0;
}

void tobjCopy(){
    Sa2 s1("copy data");
    Sa2 s2 = s1;
    cout << "b is:"<< s1.b<< "#"<<s2.b<<endl;
    //tobjCopy2(s1);
}
void tobjCopy2(Sa2 s){
    return;
}
void tobject(){
    Sa s2("a");
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值