0
点赞
收藏
分享

微信扫一扫

类的组合。。。

唯米天空 2022-01-21 阅读 78
c++

一、以另一个类的对象作为数据成员,构造函数必须采用初始化参数列表的方式

构造函数必须采用初始化参数列表的方式

访问依旧受到权限限定

class Boy
{
public:
	Boy(string name, int age) :name(name), age(age) {}
	void print()
	{
		cout << name << "\t" << age<<endl;
	}
protected:
	void printData()
	{
		cout << name << "\t" << age << endl;
	}
	string name;
	int age;

};
class MM
{
public:
	//对于boy用初始化参数列表的方式,对于自己的mmName随意
	MM(string boyName, int boyAge,string name) :boy(boyName, boyAge),mmName(name) {}
	MM(string mmName) :mmName(mmName), boy("默认", 15) {}
	void print()
	{
		boy.print();
		//不能调用printData访问权限还是相同的,依旧受权限限定
	}
protected:
	string mmName;
	Boy boy;//只存在构造一个对象的写法,不能够在此初始化
    //Boy boy("默认",18) 错误
};

构造顺序问题(只和定义顺序有关)

class A
{
public:
	A(string str) :str(str) {
		cout << str;
	};
	string str;
};
class B
{
public:
	B(string str) :str(str) {
		cout << str;
	}
	string str;
};
class C
{
public:
	C(string str) :str(str) {
		cout << str;
	}
	string str;
};
class D
{
public:
	D(string stra, string strb, string strc) :a(stra), c(strc),b(strb) {}
//构造顺序只和定义顺序有关
	A a;
	B b;
	C c;
};

二、类中类

迭代器-->类模仿指针 本质类中类

以链表为例

    List list;
	for (int i = 0;i < 3;i++)
	{
		list.push_front(i);
	}
    //采用重载的方式,将对象用作访问的接口
	List::iterator iter;
	for (iter = list.begin();iter != list.end();iter++)
		cout << (*iter)->data;
struct Node
{
	int data;
	Node* next;
	Node()
	{
		this->next = nullptr;
	}
	Node(int data)
	{
		this->data = data;
		this->next = nullptr;
	}
};
class List
{
public:
	List()
	{
		headNode = new Node;
	}
	void push_front(int data)
	{
		Node* newNode = new Node(data);
		newNode->next = headNode->next;
		headNode->next = newNode;
	}
	
protected:
	Node* headNode;
public:
	class iterator
	{
	public:
		iterator(Node* pMove = nullptr) :pMove(pMove) {}
		void operator=(iterator object)
		{
			this->pMove = object.pMove;
		}
		bool operator!=(iterator object)
		{
			return this->pMove != object.pMove;
		}
		 iterator operator++(int)//用int表示后置++,int用作标识
		{
			pMove = pMove->next;
			return iterator(pMove);
		}
		 Node* operator*()
		 {
			 return pMove;
		 }
	protected:
		Node* pMove;
	};
	iterator begin()
	{
		return iterator(headNode->next);
	}
	iterator end()
	{
		return iterator(nullptr);
	}
};

类中的枚举类型依旧受到权限限定

class A
{
public:
	enum sa{ed,ad,cx};
protected:
	enum data{man,sxc};
};
int main()
{
    //cout << A::data::man; 错误
	cout << A::sa::ad;
	
	return 0;
}

三、默认的函数

class A
{
public:
	A() = default;//类中默认的构造函数
	A(A& object) = default;//默认的拷贝构造函数
	A& operator=(A& object) = default;//默认赋值
	~A() = default;//默认的析构函数
	
};
举报

相关推荐

0 条评论