定义抽象数据类型(类)struct,calss(1)

本文详细介绍了C++中类的定义,包括public、protected和private三种访问权限,以及如何通过struct和class创建类。讲解了构造函数(包括无参构造、有参构造和拷贝构造)、析构函数的作用。还讨论了对象初始化与清理的过程,以及构造函数的分类。
摘要由CSDN通过智能技术生成

抽象数据类型

        关键字为struct ,class均可定义一个类,类也就是一种自己定义的数据类型,这个数据类型会包含很多其他的数据类型,如c++primer是一个类,其中的各章节也就是其类中的成员,其成员有他自己的属性,最后形成了封装的c++primer,使用classstruct定义类的唯一区别就是默认的访问权限,这里先介绍访问权限。

1、访问权限

        访问权限一共三种:

class Person
{
public:
	//公共权限的成员
	string name;
protected:
	//保护权限
	string car;
private:
	//私有权限
	string password;
};

        public: 公共访问权限,在此权限下的类成员,在类的内外均可以进行访问;

        protected:  保护访问权限,在此权限下的类成员,在类内可以访问,但是在类外不可以访问;

但是在后续介绍继承的时候,子类就可以继承;

        private:  私有访问权限,在此权限下的类成员,在类内可以访问,但是在类外不可以访问;

后续继承中,子类也不可以访问。

        在这里说明,继承就好比儿子继承父亲的东西,有一些只有儿子可以继承,但是父亲也有儿子不知道的东西。

        class默认访问类型是private,struct默认访问类型是public;

2、构造类

2.1用struct构造类

struct 类名
{
	int i;                        //变量
	const int j;                  //常量
	int* p;                       //指针
	vector<int>v;                 //容器等
};

可以是系统的类型,可以是自己构造的类。

2.2用class构造类

由于class默认的成员访问权限是private故使用class要加上权限说明。

class lname
{
public:
	int i;
protected:
	const int j;
	int* p;
private:
	vector<int>v;
};

3.类的对象的初始化与清理   

        一般来说类的对象的初始化均是利用构造函数来初始化利用析构函数来清理,下面这段代码就是构造函数与析构函数的大体组成;

class MyClass
{
public:
	MyClass()                   //这是类的构造函数的形式
	{
		statement;
	}
	~MyClass()                  //这是类的析构函数的形式
	{
		statement;
	}
};

3.1构造函数

        1)构造函数用来进行对类的初始化函数名与类名相同;

        2)没有返回值,不用写void;

        3)可以有参数,可以发生重载;

        4)构造对象时,构造函数自动调用而且只调用一次;

3.2析构函数

        1)析构函数用来清理的作用;

        2)没有返回值,不用写void;

        3)  不可以有参数,不能发生重载

        4)在对象销毁前自动调用析构函数,且只调用一次。

总结:如果构造类时没有写构造函数和析构函数,编译器会自动构造一个空的构造函数和析构函数,构造函数是用来对类初始化的,析构函数是用来在对象销毁前对其所占的空间进行释放的。

3.3构造函数的分类

        构造函数按参数分可分为有参构造无参构造(默认构造);

        构造函数按类型分可分为普通构造拷贝构造

class MyClass
{
public:
	MyClass()		                	无参构造函数
	{
		statement;
    }	
	MyClass(参数类型 参数....)           有参构造函数

	}
	MyClass(const MyClass& p)           拷贝构造函数
	{

	}
	~MyClass()                          析构函数
	{
		statement;                      
	}
};
调用
main()
{
    1、括号发
	MyClass p1;			默认构造 ,在进行默认构造的时候不能加括号,加括号
                          编译器会认为是一个函数声明。
	MyClass p2(参数);	有参构造
	MyClass p3(p1);		拷贝构造
    2、显示法
    MyClass p4 = MyClass(参数);        相当于 MyClass p4(参数);  //有参构造
    MyClass P5 = MyClass(p4);          相当于 MyClass p5(p5);    //拷贝构造
    注意事项:
    ① 这里Person(参数)匿名对象 特点:当前行执行结束后,系统会立即回收掉匿名对象
    ② 不要利用拷贝构造函数,初始化匿名对象编译器会认为 Person(p3)=====Person p3;
    3、隐式转换法
    MyClass P6 = 参数 ;               相当于 MyClass p6(参数);  //有参构造
    MyClass P7 = P6;                  相当于 MyClass p7(p6);    //拷贝构造

}

4、初始化列表

        

class MyClass
{
public:
	传统初始化操作
	MyClass(int a, int b, int c)
	{
		m_A = a;
		m_B = b;
		m_C = c;
	}
	利用初始化列表操作
	MyClass(int a , int b, int c):m_A(a), m_B(b), m_C(c)
	{

	}
	int m_A;
	int m_B;
	int m_C;
};
int main()
{
	MyClass mc(1,2,2);                                       
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

门三o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值