类和对象的基本概念
1.类:一系列事物的抽象,万物皆可为类
(1)属性:事物的特征/数据类型的描述
(2)行为:事物的操作/函数描述
2.对象:类的具体化/类的实例化
类的定义
1.创建语法
class 类名
{
//权限限定词
public: //共有属性(类外的接口)
protected: //保护属性
private: //私有属性
};
2.权限限定词的作用
(1)类外只能访问共有属性。类外访问类内的数据,只能通过对象访问,static成员除外。
(2)保护属性和私有属性类外不可访问,可以通过共有接口间接访问
(3)默认属性为私有属性(没有写在限定词下的)
(4)权限限定词限定类外的访问,并不限定类中
3.C++结构体(当作类)默认属性为共有属性,可以有权限限定词
#include <string>
#include <iostream>
using namespace std;
class ZY
{
void Print()//私有属性,类外无法访问
{
cout << name << "\t" << age << endl;
}
public:
void print()//成员函数
{
cout << name << "\t"<<age << endl;
}
void init(string n_name, int n_age);//声明(接口)
protected:
string name;
int age;
private:
};
void ZY::init(string n_name, int n_age)
{
name = n_name;
age = n_age;
}
struct Zy
{
int num;
protected:
string name;
private:
int age;
};
int main()
{
ZY zy;
zy.init("姓名", 21);
zy.print();
//zy.name=22;无法访问
return 0;
}
对象创建(无构造函数)
1.普通对象
2.对象数组
3.new一个对象
#include <string>
#include <iostream>
using namespace std;
class ZY
{
public:
void print()
{
cout << name << "\t" << age << endl;
}
void init(string nname,int nage)//初始化函数
{
name = nname;
age = nage;
}
protected:
string name="zy";
int age=21;
};
int main()
{
ZY zy;//普通对象
zy.print();
ZY zyarray[2];//对象数组
for (int i = 0; i < 2; i++)//循环初始化
{
zyarray[i].init(string("姓名") + to_string(i), i + 21);
zyarray[i].print();
}
ZY* p = new ZY;
p->print();
delete(p);
p = nullptr;
return 0;
}
成员访问(初始化)
1.通过共有接口传参初始化数据
2.通过共有接口返回值初始化数据
#include <iostream>
#include <string>
using namespace std;
class ZY
{
public:
void init(string nname, int nage)//传参方式
{
name = nname;
age = nage;
}
string& getname()//返回引用的方式
{
return name;
}
int& getage()
{
return age;
}
void print()
{
cout << name << "\t" << age << endl;
}
protected:
string name="默认值";
int age=0;
};
int main()
{
ZY zy;
zy.print();//未初始化,默认值
zy.init("姓名",21);
zy.print();
ZY Zy;
Zy.getname() = "姓名1";
Zy.getage() = 21;
Zy.print();
return 0;
}
链表(C语言结构体链表,C++结构体链表,C++类链表)
#include <cstring>
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
#if 0
//C语言结构体链表
struct Node//创建结构体
{
int data;
struct Node* next;
};
struct Node* HeadList()//创建表头
{
Node* headNode = new Node;
headNode->next = nullptr;
return headNode;
}
struct Node* NewNode(int data)//创建节点
{
Node* newNode = new Node;
newNode->data = data;
newNode->next = nullptr;
return newNode;
}
void InsertList(Node* headList, int data)//头插法
{
Node* newNode = NewNode(data);
newNode->next = headList->next;
headList->next = newNode;
}
void printList(Node* headList)//打印
{
Node* tempList = headList->next;
while (nullptr != tempList)
{
cout << tempList->data << endl;
tempList = tempList->next;
}
}
void testCList()//检测
{
Node* list = HeadList();
InsertList(list, 22);
InsertList(list, 21);
printList(list);
}
#endif
#if 1
//C++结构体链表
struct Node
{
int data;
Node* next;
};
class List
{
public:
void createList()//头链表
{
headNode = new Node;
headNode->next = nullptr;
}
void insertList(int data)//插入
{
Node* newNode = new Node;
newNode->data = data;
newNode->next = headNode->next;
headNode->next = newNode;
}
void printList()
{
Node* tempNode = headNode->next;
while (nullptr != tempNode)
{
cout << tempNode->data << endl;
tempNode = tempNode->next;
}
}
protected:
Node* headNode;//表示表头
};
void testCPPList()//检测
{
List* plist=new List;//创建对象
plist->createList();
plist->insertList(22);
plist->insertList(21);
plist->insertList(20);
plist->printList();
}
#else
//C++类链表
class Node
{
public:
Node*& getnext()//用引用的方式返回指针
{
return next;
}
int& getdata()
{
return data;
}
protected:
int data;
Node* next;
};
class List
{
public:
void createList()//初始化
{
headNode = new Node;
headNode->getnext() = nullptr;
}
void insertList(int data)//创建节点
{
Node* newNode = new Node;
newNode->getdata() = data;
newNode->getnext() = headNode->getnext();
headNode->getnext() = newNode;
}
void printList()//打印
{
Node* tempNode = headNode->getnext();
while (nullptr != tempNode)
{
cout << tempNode->getdata() << endl;
tempNode = tempNode->getnext();
}
}
protected:
Node* headNode;
};
void testCPPList1()//检测
{
List* plist = new List;//创建对象
plist->createList();
plist->insertList(22);
plist->insertList(21);
plist->insertList(20);
plist->printList();
}
#endif
int main()
{
//testCList();
//testCPPList();
//testCPPList1();
return 0;
}
|