c++入门知识

目录

一.static修饰类域中的私有变量

二.static修饰成员函数

三.内置类型转成自定义类型

四.友元函数

五.内部类

六.编辑器对构造实例的优化

七.new和delete关键字


一.static修饰类域中的私有变量

其定义不能使用初始化列表定义,因为每初始化一个实例对象都要调用初始化列表。static定义在类外(该类的下面)代码如下 _year变量:


class A{
private:
	static int _year;
	int _month;
public:
	
};
int A::_year = 1;
int main() {
	
	return 0;
}

二.static修饰成员函数

用static修饰成员函数不会传this指针,这也就导致这个函数不能访问类中的储存在栈上的私有变量,只能访问储存在静态区的定义在类中的私有的static修饰的变量和函数。在类中由static修饰的变量属于这个类的每一个对象。如下图案例:

三.内置类型转成自定义类型

内置类型会先去调用该自定义类型的构造函数产生一个临时的对象,再将对象拷贝构造给自定义类型对象。如果不想发生隐式转换则可以在构造函数前加explicit关键字。如下代码所示:

代码运行结果为12

class A{
private:
	static int _year;
	int _month;
public:
	A(int month) {
		_month = month;
	}
	 void print() {
		cout <<  _year<<_month << endl;
	 }
	
};
int A::_year = 1;
int main() {
	A a = 2;
	a.print();
	return 0;
}

加explicit不能隐式转但是六月强制转换,运行结果依然是12。


class A{
private:
	static int _year;
	int _month;
public:
	explicit A(int month) {
		_month = month;
	}
	 void print() {
		cout <<  _year<<_month << endl;
	 }
	
};
int A::_year = 1;
int main() {
	A a = (A)2;
	a.print();
	return 0;
}

四.友元函数

1)友元关键字会导致低耦合。

2)友元类不能传递,如a是b的友元,b是c的友元,但是a不是c的友元。

五.内部类

内部类能够访问外面的私有化成员变量,内部类的外部能够访问内部类的公有化变量。

六.编辑器对构造实例的优化

一般在同一个表达式中,或者在函数的直接传参调用中。vs2019一般是如下优化:

1)构造函数+构造函数   ->  构造函数

2)构造函数+拷贝构造   ->  构造函数

3)拷贝构造+拷贝构造   ->  拷贝构造

注意不同的编辑器可能优化程度不同,越新的编译器优化的越厉害。

七.new和delete关键字

1)new的本质是调用operator new和构造函数初始化对象,delete的本质是调用operator delete和析构函数释放空间。

2)operator new本质是调用了malloc函数加上外封装抛出异常,operator delete的本质是调用了free加上外封装抛出异常。

3)new 自定义类型  [10]  这时会多开首四个字节空间用于存放开辟的元素个数,用于delete[] 对象的时候知道调用多少次析构函数释放对象空间。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值