微信网站开发文档,用wordpress建公司网站步骤,惠州网站设计培训,外贸网站源码免费个人主页#xff1a;北海 #x1f390;CSDN新晋作者 #x1f389;欢迎 #x1f44d;点赞✍评论⭐收藏✨收录专栏#xff1a;C/C#x1f91d;希望作者的文章能对你有所帮助#xff0c;有不足的地方请在评论区留言指正#xff0c;大家一起学习交流#xff01;#x1f9… 个人主页北·海 CSDN新晋作者 欢迎 点赞✍评论⭐收藏✨收录专栏C/C希望作者的文章能对你有所帮助有不足的地方请在评论区留言指正大家一起学习交流 目录
前言
一.“大众情人”静态数据成员
二.永葆初心之常成员-const
1.const数据成员的初始化方式
2.const修饰的对象与成员函数 结语: 前言 在C中const和static是两个重要的关键字它们分别用于声明常量和静态成员。const用于指定一个值在程序运行期间将保持不变提高代码的可读性和安全性而static用于指定一个成员在类的所有实例之间共享提供静态的存储和管理方式。理解const和static的概念以及正确应用它们可以帮助我们编写更健壮和高效的C代码。 一.“大众情人”静态数据成员 思考一个问题 在c中,创建对象时候,你不定义全局变量的情况下,如何实现? 在类中定义一个变量吗? class Human{private:int count 0;//使用类内初始值public:Human(){count;
}}; 这种方法肯定是行不通的,因为每个对象都有一个count变量,每个对象的count初始值为0,然后再执行构造函数,最终的结果是,无论有多少个对象,每个对象的count值都为1 1.如果在c语言中分文件的开发模式下,如何定义全局变量和访问呢? Human.cpp#include Human.h
int count 0;Human::Human() {count;
}
int Human::getAge() {return age;
}void Human::setAge(int age) {this-age age;
}
int Human::getCount() {return count;
} Human.h文件#pragma once
extern int count;class Human {private:int age;
public:Human();void setAge(int age);int getAge();int getCount();
}; main.cpp文件#include iostream
#include Human.h
using namespace std;int main() {Human m1,m2,m3;cout 总人数 m1.getCount() endl;
} 根据上面再c语言中使用extern进行全局变量的分文件开发还是很麻烦的,再c中可以使用静态变量进行实现 2.C中解决定义全部变量的方式 关键字 : static 当定义为静态变量时候,该变量就不会在栈区了,不属于任何一个对象,而是属于整个类 定义方法 : 可以再Human.h文件类中进行先声明,例如 Human{
private:static int count;//声明非常量的静态成员变量
const static int count 0 ;//常量静态成员变量}; 对于非const的类静态成员只能在类的实现文件中初始化。 const类静态成员可以在类内设置初始值也可以在类的实现文件中设置初始值。但是不要同时在这两个地方初始化只能初始化1次 在给非常量静态成员变量赋值的方法 int Human :: count 0;
格式 : 变量类型 类名 :: 变量名 初始值; 给非常量静态变量可以直接定义赋值,必须在类外 static int a 10;
可以在类外的任何地方进行定义 在声明中,不能直接对非常量静态成员变量赋值,但是可以给常量静态成员变量在声明时赋值 3.哪些函数可以访问静态成员变量 1) 类的普通成员函数可以直接访问静态成员可读可写 class Human{private:
static int a 0 ;public:int getA(){
a;//可以对静态成员变量进行改写return a;//可读}
}; 2) 静态普通函数 问题:当在非静态普通函数里,如何去访问静态成员变量 void test() {cout 总人数: ;// ??? 没有可用的对象来访问getCount()
} 如果为了访问总的人数而特意去创建一个对象就很不方便而且得到的总人数还不真实包含了一个没有实际用处的人 访问方式: 通过对象访问,此时会与预期结果不符合 通过类来访问 由此可以看出,通过类也不能访问到,此时可以将getcount函数改为static类型的 解决方法: 将getCount函数定义为static,此时就可以访问到了 类的静态方法 可以直接通过类来访问【更常用】也可以通过对象实例来访问。在类的静态方法中不能访问普通数据成员和普通成员函数对象的数据成员和成员函数 3.静态方法中不能访问this指针,因为this指针是属于实例对象的 4.静态方法中只能访问静态数据成员 总结 : 1) .静态数据成员 对象的成员函数没有static的成员函数内部可以直接访问“静态数据成员” 类的静态成员函数有static的成员函数内部可以直接访问“静态数据成员” 即所有的成员函数都可以访问静态数据成员。 类不能直接访问普通的静态数据成员 2) .静态成员函数 对象可以直接访问静态成员函数 类可以直接访问静态成员函数 在类的静态成员函数类的静态方法内部不能直接访问this指针和对象的数据成员 在类的静态成员函数类的静态方法内部只能访问类的数据成员 最后两句对象的数据成员函数只得就是非静态的成员变量,类的数据成员函数,此时这个成员函数属于整个类,前面已经提到过,此时指的就是static修饰的成员变量 二.永葆初心之常成员-const 1.const数据成员的初始化方式 使用类内值C11支持 class Test{private:const int a 1;...
}; 使用构造函数的初始化列表 class A{private:const int a;
public:A(int _a):a(_a){}}; 如果同时使用这两种方式以初始化列表中的值为最终初始化结果 注意 不能在构造函数或其他成员函数内对const成员赋值 2.const修饰的对象与成员函数 【类比】专一男就是const对象撩妹方法就是普通的成员函数如果允许专一男调去撩妹那么专一男也就不专一了 以下示例:const对象访问普通成员函数 解决方案 如果一个成员函数内部不会修改任何数据成员就把它定义为const成员函数。此时只需要输出a的值,所以将print函数,定义为const类型 注意const的放置位置 总结 : 如果声明的对象只去访问不改变值得函数,则可以将对象用const修饰,如果该成员函数内只读,则也将该函数用const修饰,const对象只能访问const修饰得成员函数,普通对象可以访问任意成员函数, 结语: 在C中const和static是两个强大的关键字它们为我们提供了更加丰富和灵活的编程工具。const使得代码更加安全可靠通过禁止对常量进行修改确保程序的正确性。static则提供了一种在类的所有实例之间共享数据和行为的机制有助于节约内存和简化程序结构。深入理解const和static的特性和使用方式我们能够更加自如地控制数据的可变性和访问方式编写出更稳定、可扩展和易于维护的代码。const和static是C编程中的重要概念它们的合理运用将大大提升代码质量和开发效率。