面向对象_访问修饰符_构造与析构函数_this指针
1:面向对象
以codeblocks举例,在一个工程里面: File-->new -->Class可以建一个类,可以设置类的参数,是否有set get方法,有无构造函数等设置,.h文件主要用来写类的属性和
方法声明,类名.cpp文件里面实现函数,main函数里面负责对象的调用和操作。
如下:Student.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <span class = "com" >#ifndef</span><span class = "pln" > STUDENT_H </span><span class = "com" >#define</span><span class = "pln" > STUDENT_H </span><span class = "com" >#include</span><span class = "pln" > </span><span class = "pun" ><</span><span class = "pln" >bits</span><span class = "pun" >/</span><span class = "pln" >stdc</span><span class = "pun" >++.</span><span class = "pln" >h</span><span class = "pun" >></span><span class = "pln" > </span><span class = "kwd" > using </span><span class = "pln" > </span><span class = "kwd" > namespace </span><span class = "pln" > std</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > class </span><span class = "pln" > </span><span class = "typ" >Student</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > public </span><span class = "pun" >:</span><span class = "pln" > </span><span class = "typ" >Student</span><span class = "pun" >();</span><span class = "com" > //构造函数,进行数据的初始化</span><span class="pln"> </span><span class = "typ" >Student</span><span class = "pun" >(</span><span class = "kwd" > string </span><span class = "pln" > name</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "kwd" > int </span><span class = "pln" > age</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "kwd" > virtual </span><span class = "pln" > </span><span class = "pun" >~</span><span class = "typ" >Student</span><span class = "pun" >();</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pln" > </span><span class = "typ" >Getname</span><span class = "pun" >()</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > return </span><span class = "pln" > name</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "com" > //对类的变量进行封装,便于对私有的属性进行操作</span><span class="pln"> </span><span class = "kwd" > void </span><span class = "pln" > </span><span class = "typ" >Setname</span><span class = "pun" >(</span><span class = "kwd" > string </span><span class = "pln" > val</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > name </span><span class = "pun" >=</span><span class = "pln" > val</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > int </span><span class = "pln" > </span><span class = "typ" >Getage</span><span class = "pun" >()</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > return </span><span class = "pln" > age</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > </span><span class = "typ" >Setage</span><span class = "pun" >(</span><span class = "kwd" > int </span><span class = "pln" > val</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > age </span><span class = "pun" >=</span><span class = "pln" > val</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > int </span><span class = "pun" >*</span><span class = "pln" > </span><span class = "typ" >Getscore</span><span class = "pun" >()</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > return </span><span class = "pln" > score</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > </span><span class = "typ" >Setscore</span><span class = "pun" >(</span><span class = "kwd" > int </span><span class = "pun" >*</span><span class = "pln" > val</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > score </span><span class = "pun" >=</span><span class = "pln" > val</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > </span><span class = "typ" >Show</span><span class = "pun" >(</span><span class = "kwd" > string </span><span class = "pln" > </span><span class = "pun" >,</span><span class = "pln" > </span><span class = "kwd" > int </span><span class = "pln" > </span><span class = "pun" >);</span><span class = "com" > //在.h文件里面进行函数定义</span><span class="pln"> </span><span class = "kwd" > protected </span><span class = "pun" >:</span><span class = "pln" > </span><span class = "kwd" > private </span><span class = "pun" >:</span><span class = "com" > //私有的属性</span><span class="pln"> </span><span class = "kwd" > string </span><span class = "pln" > name</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > int </span><span class = "pln" > age</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > int </span><span class = "pun" >*</span><span class = "pln" > score</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >};</span><span class = "pln" > </span><span class = "com" >#endif</span><span class = "pln" > </span><span class = "com" > // STUDENT_H</span> |
main.cpp
1 2 3 4 5 6 7 8 9 10 11 12 | <span class = "com" >#include</span><span class = "pln" > </span><span class = "pun" ><</span><span class = "pln" >bits</span><span class = "pun" >/</span><span class = "pln" >stdc</span><span class = "pun" >++.</span><span class = "pln" >h</span><span class = "pun" >></span><span class = "pln" > </span><span class = "kwd" > using </span><span class = "pln" > </span><span class = "kwd" > namespace </span><span class = "pln" > std</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "com" >#include</span><span class = "pln" > </span><span class = "str" > "Student.h" </span><span class = "pln" > </span><span class = "kwd" > int </span><span class = "pln" > main</span><span class = "pun" >()</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "typ" >Student</span><span class = "pln" > stu1</span><span class = "pun" >;</span><span class = "com" > //;自动调用无参构造函数</span><span class="pln"> cout </span><span class = "pun" ><<</span><span class = "pln" > </span><span class = "str" > "由构造函数初始化的年龄和姓名" </span><span class = "pln" > </span><span class = "pun" ><<</span><span class = "pln" >stu1</span><span class = "pun" >.</span><span class = "typ" >Getage</span><span class = "pun" >()</span><span class = "pln" > </span><span class = "pun" ><<</span><span class = "pln" > stu1</span><span class = "pun" >.</span><span class = "typ" >Getname</span><span class = "pun" >()</span><span class = "pln" > </span><span class = "pun" ><<</span><span class = "pln" > endl</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "typ" >Student</span><span class = "pln" > stu2</span><span class = "pun" >(</span><span class = "str" > "小红" </span><span class = "pun" >,</span><span class = "lit" >12</span><span class = "pun" >);</span><span class = "com" > //有参构造函数</span><span class="pln"> stu1</span><span class = "pun" >.</span><span class = "typ" >Show</span><span class = "pun" >(</span><span class = "str" > "小明" </span><span class = "pun" >,</span><span class = "lit" >13</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "kwd" > return </span><span class = "pln" > </span><span class = "lit" >0</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span> |
student.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <span class = "com" > /* * 文件名: * 描 述: * 作 者: * 时 间: * 版 权: */ #include</span><span class = "pln" > </span><span class = "str" > "Student.h" </span><span class = "pln" > </span><span class = "com" >#include</span><span class = "pln" > </span><span class = "pun" ><</span><span class = "pln" >bits</span><span class = "pun" >/</span><span class = "pln" >stdc</span><span class = "pun" >++.</span><span class = "pln" >h</span><span class = "pun" >></span><span class = "pln" > </span><span class = "kwd" > using </span><span class = "pln" > </span><span class = "kwd" > namespace </span><span class = "pln" > std</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "typ" >Student</span><span class = "pun" >::</span><span class = "typ" >Student</span><span class = "pun" >()</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > name </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "str" > "默认名" </span><span class = "pun" >;</span><span class = "pln" > age </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "lit" >100</span><span class = "pun" >;</span><span class = "pln" > cout </span><span class = "pun" ><<</span><span class = "pln" > </span><span class = "str" > "我是(无参)构造函数" </span><span class = "pln" > </span><span class = "pun" ><<</span><span class = "pln" > endl</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "typ" >Student</span><span class = "pun" >::</span><span class = "typ" >Student</span><span class = "pun" >(</span><span class = "kwd" > string </span><span class = "pln" > name</span><span class = "pun" >,</span><span class = "kwd" > int </span><span class = "pln" > age</span><span class = "pun" >){</span><span class = "pln" > </span><span class = "typ" >Student</span><span class = "pun" >::</span><span class = "typ" >Setage</span><span class = "pun" >(</span><span class = "pln" >age</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "typ" >Student</span><span class = "pun" >::</span><span class = "typ" >Setname</span><span class = "pun" >(</span><span class = "pln" >name</span><span class = "pun" >);</span><span class = "pln" > name </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "typ" >Student</span><span class = "pun" >::</span><span class = "typ" >Getname</span><span class = "pun" >();</span><span class = "pln" > age </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "typ" >Student</span><span class = "pun" >::</span><span class = "typ" >Getage</span><span class = "pun" >();</span><span class = "pln" > cout </span><span class = "pun" ><<</span><span class = "pln" > </span><span class = "str" > "学生" </span><span class = "pln" > </span><span class = "pun" ><<</span><span class = "pln" >name</span><span class = "pun" ><<</span><span class = "pln" > </span><span class = "str" > "的年龄是" </span><span class = "pln" > </span><span class = "pun" ><<</span><span class = "pln" > age </span><span class = "pun" ><<</span><span class = "pln" > endl</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "typ" >Student</span><span class = "pun" >::~</span><span class = "typ" >Student</span><span class = "pun" >()</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > cout </span><span class = "pun" ><<</span><span class = "pln" > </span><span class = "str" > "我是析构函数,负责对象的回收" </span><span class = "pln" > </span><span class = "pun" ><<</span><span class = "pln" > endl</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > </span><span class = "typ" >Student</span><span class = "pun" >::</span><span class = "typ" >Show</span><span class = "pun" >(</span><span class = "kwd" > string </span><span class = "pln" > name</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "kwd" > int </span><span class = "pln" > age</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > cout </span><span class = "pun" ><<</span><span class = "pln" > </span><span class = "str" > "学生" </span><span class = "pln" > </span><span class = "pun" ><<</span><span class = "pln" >name </span><span class = "pun" ><<</span><span class = "pln" > </span><span class = "str" > "的年龄是" </span><span class = "pln" > </span><span class = "pun" ><<</span><span class = "pln" > age </span><span class = "pun" ><<</span><span class = "pln" > endl</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span> |
2:访问修饰符
通过为参数设置set和get方法进行私有属性的操作。
1 #ifndef STUDENT_H 2 #define STUDENT_H 3 #include <bits/stdc++.h> 4 using namespace std; 5 class Student 6 { 7 public: 8 Student();//构造函数,进行数据的初始化 9 Student(string name, int age); 10 virtual ~Student(); 11 12 string Getname() { return name; }//对类的变量进行封装,便于对私有的属性进行操作 13 void Setname(string val) { name = val; } 14 int Getage() { return age; } 15 void Setage(int val) { age = val; } 16 int* Getscore() { return score; } 17 void Setscore(int* val) { score = val; } 18 void Show(string , int );//在.h文件里面进行函数定义 19 protected: 20 21 private://私有的属性 22 string name; 23 int age; 24 int* score; 25 }; 26 27 #endif // STUDENT_H
3:构造与析构函数
.cpp文件

1 /* 2 * 文件名: 3 * 描 述: 4 * 作 者: 5 * 时 间: 6 * 版 权: 7 */#include "Student.h" 8 #include <bits/stdc++.h> 9 using namespace std; 10 Student::Student() 11 { 12 name = "默认名"; 13 age = 100; 14 cout << "我是(无参)构造函数" << endl; 15 } 16 Student::Student(string name1,int age1):name(name1),age(age1)//初始化列表 17 { 18 //name = name1; 19 //age = age1; 20 name = Student::Getname(); 21 age = Student::Getage(); 22 cout << "学生" <<name<< "的年龄是" << age << endl; 23 } 24 25 Student::~Student() 26 { 27 28 cout << "我是析构函数,负责对象"<< Student::Getname()<<"的回收" << endl; 29 } 30 void Student::Show(string name, int age) 31 { 32 cout << "学生" <<name << "的年龄是" << age << endl; 33 }
main.cpp文件

1 #include <bits/stdc++.h> 2 3 using namespace std; 4 #include "Student.h" 5 int main() 6 { 7 Student stu1;//;自动调用无参构造函数,在栈内存中分配空间,自动调用delete回收 8 cout << "由构造函数初始化的年龄和姓名" <<stu1.Getage() << stu1.Getname() << endl; 9 Student stu2("小红",12);//有参构造函数 10 stu1.Show("小明",13); 11 12 Student* stu3 = new Student("岳飞",40);//在堆空间中分配内存 13 cout << "名字是" << stu3->Getname() << endl; 14 delete stu3;//需要手动调用delete释放内存 15 16 return 0; 17 }
栈空间对象自动释放,通过new占用的堆空间需手工delete释放,析构函数只有一个,不能重载。
4:this指针
(*this)返回的是类对象本身。
作者:你的雷哥
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!