1.以另一个类的对象为数据成员,必须采用初始化参数列表的写法
#include#include using namespace std; class Boy { public: Boy(string name, int age) :name(name), age(age){} void printBoy() { cout << name << "t" << age << endl; } protected: string name; int age; }; class Girl { public: Girl(string boyname, int boyage, string name) :boy(boyname, boyage), name(name){} void printGirl() { boy.printBoy(); cout << name << endl; } protected: string name; Boy boy; }; int main() { Girl mm("男孩", 21, "女孩"); mm.printGirl(); return 0; }
2.类的组合构造顺序(和定义对象顺序有关)
3.类中类(链表遍历)
#include#include using namespace std; struct Node { int data; Node* next; Node()//头 { this->next = nullptr; } Node(int data)//插入 { this->next = nullptr; this->data = data; } }; 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=(Node* pMove) { this->pMove = pMove; } bool operator!=(Node* pMove)//重载!= { return this->pMove != pMove; } iterator operator++()//重载前置++ { pMove = pMove->next; return iterator(pMove); } Node*& operator*()//重载* { return pMove; } protected: Node* pMove; }; Node* begin()//头节点的next { return headNode->next; } Node* end()//尾节点的空 { return nullptr; } }; //类中枚举类型 class A { public: enum time { first, second }; protected: enum date { mon, sur, tus }; //类中的枚举类型受权限限定 }; int main() { 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; } //cout << A::date::mon << endl; 受权限限定,不可访问 cout << A::time::first << endl; return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)