C++基本类成员函数

一:C++中6个基本的类成员函数

构造函数特性:与类名称相同,可以重载(一个类可以有多个构造函数),用来在创建对象时初始化对象。

析构函数特性:~加类名称(~Mycode),一个类只有一个,当对象结束生命周期时,自动调用析构函数结束释放内存。

构造函数默认构造函数
有参构造函数
拷贝构造函数
赋值构造函数
析构函数
const成员函数
取地址成员函数和const取地址成员函数
  1. char* 是一个指向字符的指针,指向字符串存储在内存中的位置
  2. 构造函数的字符串参数应该是const char*类型,不应该修改传入的字符串
  3. 创建了一个public成员变量 char* cc和一个private成员变量 char*bb
  4. new关键字用于动态分配内存,并返回所分配内存的地址。new char用于在堆(heap)上动态分配一个char类型的内存空间,并返回一个指向这块内存的指针。

二:默认构造函数

类名称()

没有显示的提供初始化的构造函数,没有参数的构造函数。MYcode() 

class MYcode {
public:
//--------------------------默认构造函数
	MYcode() { cout<<"调用默认构造函数" << endl; };
	char* cc;
private:
	char* bb;
};
int main(){
    MYcode str;//通过默认构造函数初始化对象(要是没有默认构造函数,这里会报错默认构造函数)
    str.cc = new char[2]; // 分配内存给cc
    strcpy_s(str.cc,2,"a");
    cout << str.cc << endl;
    return 0;
}

三:有参构造函数

类名称(参数1类型 参数1,参数2类型,参数2)

有参数的构造函数,可以在初始化对象时,直接传入参数,比如我们这里有两个参数char * cc,char *bb。MYcode(const char* c,const char* b)

class MYcode {
public:
    //--------------------------有参数构造函数
	MYcode(const char* c,const char* b) {//这里的const意思时传入的变量不可修改
		cout << "调用有参数构造函数" << endl;
		if (c!=nullptr) {//判断传入的c是否为空
			cc = new char[strlen(c) + 1];//接收传入的字符串的长度+一个表示字符串结束的'\0'
			strcpy_s(cc, strlen(c) + 1, c);
		}
		else {//如果传入的是空字符串,则开辟一个字节空间,存放'\0'
			cc = new  char[1];
			*cc = '\0';
		}
		if (b != nullptr) {
			bb = new char[strlen(b) + 1];
			strcpy_s(bb, strlen(b) + 1, b);
		}
		else {
			bb = new  char[1];
			*bb = '\0';
		}
		
	}
    char* get_bb()const { return bb; }//返回私有成员变量bb
    char* cc;
private:
	char* bb;
};
int main(){
    MYcode str1("hello", "today"); // 通过有参构造函数直接初始化对象
    cout << str1.cc <<" "<<str1.get_bb() << endl;
    return 0;
}

四:拷贝构造函数

类名称(const 类名称 & 对象名称)

可以通过一个对象初始化另一个对象 MYcode(const MYcode &p)

......
public:
    	MYcode(const MYcode &p) {//
		cout<<"调用拷贝构造函数" << endl;
		cc = new char[strlen(p.cc)+1];
		strcpy_s(cc, strlen(p.cc) + 1, p.cc);
		bb = new char[strlen(p.bb) + 1];
		strcpy_s(bb, strlen(p.bb) + 1, p.bb);
	}
......
int main(){
    MYcode str2(str1);//通过拷贝构造函数用之前初始化的str1初始化str2
    cout << str2.cc << endl;
    return 0;
}

五:赋值构造函数

类名称 & operator=(const 类名称 & 对象名称)

可以通过一个对象初始化另一个对象,用”=“实现,MYcode& operator=(const MYcode& p),有返回值

...
public:
//-------------------------调用赋值构造函数
	MYcode& operator=(const MYcode& p) {
		cout << "调用赋值构造函数" << endl;
		if (this == &p) // 检查自赋值
			return *this;
		if (cc != nullptr) {
			delete[]cc;
		}
		cc = new char[strlen(p.cc) + 1];
		strcpy_s(cc,strlen(p.cc)+1,p.cc);
		delete[]bb;
		bb = new char[strlen(p.bb) + 1];
		strcpy_s(bb, strlen(p.bb) + 1, p.bb);
		return *this;
	}
    char* get_bb()const { return bb; }//const成员函数,用来输出private成员变量bb;
...
MYcode str3 = str1;
cout << str3.cc <<" "<< str3.get_bb()<< endl;
...

六:析构函数

~ 类名称()

使用对象结束后,释放开辟的堆区内存,对象使用结束后自动调用~MYcode()

......
public:
//------------------------调用析构函数
	~MYcode() {//析构函数
		cout << "调用析构函数" << endl;
		delete[]cc;
		delete[]bb;
		cc = nullptr;
		bb = nullptr;
	}
......

七:const成员函数

函数返回值类型 函数名称()const ( return 返回值);

用const修饰的成员函数,称为const成员函数,表明该成员函数不能对类的任何成员进行修改

......
char* get_bb()const { return bb; }//这是一个用来输出private成员变量的函数,在上面有参构造函数和赋值构造函数中用到
......

八:取地址成员函数和const取地址成员函数

详细解释可以参考这篇博客http://t.csdnimg.cn/9pkx9

用来获取对象的地址,普通取地址成员函数获取普通对象地址,const修饰的取地址成员函数获取const修饰的对象地址

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值