1.类与对象基本概念
/* 类:对一系列事物的的共同属性或者行为的一种抽象 用class修饰的(结构体在C++中也可以当作类) 属性:事物的特征 -->数据成员 行为:具体的操作 -->成员函数 对象:类的具体化 */ //1.定义一个类 namespace myData { //用namespace包括,避免重名问题 class MM { public: //属性 string name; int age; //行为 void print() { cout << name << age << endl; } }; } int main() { myData::MM mm = { "小可爱",12 }; return 0; }
2.权限问题
//2.类的权限问题 namespace myData1 { //用namespace包括,避免重名问题 //类外对象只能访问公有属性,对于类中函数没有权限可言 class MM { int num;//默认为私有属性 public://公有属性 //行为 void init(string name,int age,int num,int money) { this->name = name; this->age = age; this->num = num; this->money = money; } int& getAge() { return age; } //慎用,该用法破坏了MM的封装性(num是私有属性,但返回引用使得在类外可以修改其) int& getNum() { return num; } void print() { cout << name <<"\t"<< age<<"\t" << num <<"\t" << money << endl; } protected://保护属性 //属性 string name; int age; private://私有属性 int money; }; //对结构体而言,也存在权限限定,但结构体中默认为公有属性 }
3.类中一些东西的表示
//3.类的一些东西表示 namespace myData2 { //用namespace包括,避免重名问题 class MM { public: //行为 void print(); protected: //数据成员一般写为保护权限,很少写private //属性 string name="小可爱"; int age=18; }; } void myData2::MM::print() { cout << name <<"\t"<< age << endl; } int main() { myData::MM mm = { "小可爱",12 }; myData1::MM mm3; mm3.init("小可爱", 18, 100, 520); mm3.getNum() = 10; mm3.print(); myData2::MM mm1; mm1.print(); //成员函数的指针 //auto pf = myData1::MM::print; //*函数指针代表整个函数名 //MM:: 修饰*函数指针 //void(*myData1::MM::p)() = &myData1::MM::print; 错误 void(myData2::MM:: * p)() = &myData2::MM::print; //(类的对象.*指针)(参数) (mm1.*p)(); //mm1.(*p)(); 错误 myData2::MM* mm2 = new myData2::MM; (mm2->*p)(); return 0; }