1 #include <iostream> 2 /*这是C++中关于面向对象部分的具体笔记和代码 3 */ 4 5 6 //定义类的语法形式; 7 //类中的成员项目之间相互引用,直接使用成员; 8 //类外引用成员的时候需要使用对象名访问public成员; 9 class Person { 10 public: 11 Person(int Id,std::string Name); 12 Person():Person(1,"TOM"){};//委托构造函数 13 int ID;//公有成员(外部借口); 14 std::string name; 15 int names(std::string name); 16 int ids(){ 17 return 5; 18 }//内联函数; 19 private: 20 int sex, age; //私有成员; 21 protected: 22 int number = 15; //保护成员; 23 }; 24 //定义函数原型; 25 //类的成员函数在类体内定义的时候,为内联函数,需要足够简单 26 //类外定义的成员函数。 27 28 29 //构造函数: 30 //1、函数名必须与类名相同 31 //2、不能有返回值 32 //3、可以有形参,也可以没有形参 33 //4、可以重载,可以是内联函数 34 //5、可以带默认参数 35 36 //隐含的构造函数 37 //未定义构造函数,自动生成一个默认构造函数(自己定义了构造函数,仍然希望编译器定义默认的初始化构造函数时, 38 //Clock() =default; 39 //参数为空时,补位数据成员设置初始值 40 //如果没有定义类内的初始值,以默认方式初始化:基本类型的数据默认初始化的值是不确定的 41 //一定不能定义返回值类型:错误:void Person::Person(){};,一定不能有void 42 Person::Person(int Id,std::string Name="leo"){ 43 ID =Id; 44 name =Name; 45 std::cout<<"初始化完成 "<<"id,name"<<ID<<name<<"。 "; //自己定义的初始化构造函数 46 } 47 //Person::Person():ID(10),name("tom") { 48 // std::cout << "初始化完成 " << "id,name" << ID << name << "。 "; //自己定义的默认初始化构造函数 49 //} 50 //委托构造函数,委托构造函数重写上面这个函数 51 //Person():Person(0,"tom",10){} 52 int Person::names(std::string name){ 53 name=name; 54 std::cout<<"他的名字是:"<<name<<" "; 55 std::cout<<ID<<" "<<sex<<" "<<age<<" "<<number; 56 }; 57 58 class Clock{ 59 public: 60 Clock(int,std::string); 61 Clock(const Clock &C)=delete;//复制构造,delete使编译器不生成默认复制构造函数 62 int id; 63 ~Clock(); 64 std::string name; 65 }; 66 Clock::Clock(int Id,std::string Name){ 67 id =Id; 68 name =Name; 69 std::cout<<"初始化完成"<<std::endl; 70 } 71 //复制构造 72 //-------------------------------------------------------------------------------// 73 /*析构函数*/ 74 //析构函数完成对象被删除前的一些清理工作 75 //在对象的生存期结束的时候系统自动调用析构函数 76 Clock::~Clock(){ 77 std::cout<<"析构函数的执行过程..."<<std::endl; 78 }; 79 //----------------------------------------------------------------------------------'// 80 /*类的组合*/ 81 //组合类的构造函数 82 //谁在类体中先定义,谁先进行初始化。 83 84 int main() { 85 std::cout << "Hello, OPP!" << std::endl; 86 Person mypersonobject; 87 //类的实例化; 88 // 类的属性的更改 89 mypersonobject.ID=15; 90 int a = mypersonobject.ids(); 91 int al; 92 std::cout<<mypersonobject.ID<<" "<<a<<" "<<"al"<<al;//定义类型,没有赋值的数据是混乱的。例如al 93 mypersonobject.names("leo"); //调用类的实例的方法 94 Clock myclock(10,"joe"); 95 Person ab; 96 Person ba(ab); 97 std::cout<<" "<<ab.ID<<" "<<ba.ID<<" ----------------------------------------------------------_ "<<std::endl; 98 99 return 0; 100 } 101 102 //
执行结果
1 /home/leo/CLionProjects/OPP/cmake-build-debug/OPP 2 Hello, OPP! 3 初始化完成 4 id,name1TOM。 5 15 6 5 7 al0他的名字是:leo 8 15 9 882289344 10 32631 11 15初始化完成 12 初始化完成 13 id,name1TOM。 14 15 1 16 1 17 ----------------------------------------------------------_ 18 19 析构函数的执行过程... 20 21 Process finished with exit code 0