C++基础2

1.构造函数

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

它不具备任何类型,不返回任何值。void也不能写。

当通过一个类创建对象时,体统会自动调用类的构造函数。如果用户没有定义构造函数,体统会自动调用一个什么也不做的构造函数。

构造函数的主要功能是初始化成员变量。

#include <iostream>
using namespace std;
class test {
public:
	int a;
	int b;
	test(){//构造函数
		this->a = 0;
		this->b = 0;
	}
	test(int a, int b) {//重载后的构造函数
		this->a = a;//this指针指向当前对象
		this->b = b;
	}
};
int main() {
	test t1;//在创建对象的时候系统自动调用构造函数
	test t2(1, 2);
	cout << t1.a <<","<< t1.b << endl;
	cout << t2.a <<","<< t2.b << endl;
}
2.析构函数

析构函数是类名前面加~,当对象生命周期结束时会自动调用析构函数。

析构函数一般用于完成清理工作。

如果用户没有自定义析构函数,编译器会自动生成什么都不做的一个析构函数。
3.this指针

成员函数中都包含一个特殊的指针,这个指针的名字是固定的——this。他是当前类对象的指针。

4.常成员变量和常成员函数

常成员变量使用关键字const来申明的成员变量,const位于变量前或类型前都一样。

长成员变量只能通过构造函数的初始化表对常成员变量进行初始化。

常成员变量所在类中所有构造函数都必须通过初始化表对常成员变量初始化。

常成员函数不能修改对象,既不能修改对象的成员变量。常成员函数:用const来修饰的成员函数,const位于函数的括号之后,定义和申明的地方都要加上const。

#include <iostream>
using namespace std;
class test {
public:
	const int a;//常成员变量
	const int b;
	test():a(3),b(4){//通过初始化表对常成员变量初始化
	}
	test(int a, int b):a(a),b(b) {
	}
};
int main() {
	test t1;
	test t2(1, 2);
	cout << t1.a <<","<< t1.b << endl;
	cout << t2.a <<","<< t2.b << endl;
}
5.对象的动态创建与销毁

new和delete

用test类创建对象

test *p = new test;//动态的分配空间

delete p;//销毁空间

6.静态成员变量和静态成员函数

如果想在同类的多个对象之间实现数据的共享,可以用静态成员变量,即用static修饰的成员变量。

静态成员变量在项目刚运行的时候就分配内存,项目运行结束后才销毁。

静态成员变量可以通过类名::来访问

静态成员函数,只在申明时使用static修饰就可以了。

静态成员函数中没有this指针。

#include <iostream>
using namespace std;
class test {
public:
	static int a;//定于一个静态的成员变量
	int b;
	test(int b):b(b){
	}
};

int test::a = 10;//初始化,因为a是static类型的所以t1和t2的a的值都是一样的

int main() {
	test t1(2);
	test t2(3);
	cout << t1.a <<","<< t1.b << endl;
	cout << t2.a <<","<< t2.b << endl;
}
7.访问权限修饰符

public:成员在任何地方都可以被访问

protected:成员在当前类与子类中可访问。

private:成员在当前类中可被访问。

#include <iostream>
using namespace std;
class test {
public:
	void public_fun(){
		this->private_fun();//私有的函数可以被当前类访问
		this->protected_fun();
	}
protected:
	void protected_fun();
private:
	void private_fun();
};
int main() {

}









C++基础2,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。