中职教材 网站建设石林县工程建设个体交易网站
web/
2025/10/5 4:27:15/
文章来源:
中职教材 网站建设,石林县工程建设个体交易网站,盐城网站优化公司,六安人事考试网摘要#xff1a;class#xff0c;成员函数#xff0c;成员变量#xff0c;类的大小#xff0c;this 指针 C语言是面向过程的#xff0c;关注的是过程#xff0c;分析出求解问题的步骤#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的#xff0c;关注的是对象…摘要class成员函数成员变量类的大小this 指针 C语言是面向过程的关注的是过程分析出求解问题的步骤通过函数调用逐步解决问题。 C是基于面向对象的关注的是对象将一件事情拆分成不同的对象靠对象之间的交互完成。 1. struct → class (类)
Types
C语言当我们用C语言创建一个自定义类型 (The Type is struct MyBook) 来管理图书首先在结构体中创建用于描述图书的有关参量类似书名、价格、……接着我们需要对此实现数据管理因此我们需要实现一些函数来满足功能类似打印图书信息之类的。如下代码。 #includestdio.h
struct MyBook
{char book_name[13];double price;
};void Print(struct MyBook b_p)
{printf(%s %f, b_p.book_name, b_p.price);
}int main()
{struct MyBook book { xxxx,13.7 };Print(book);return 0;
} CC兼容C语言仍然支持使用 struct 结构体不仅如此C引入了 class 类。The Type is MyBook_C and MyBook_CPP。C语言结构体中只能定义变量在C中结构体内不仅可以定义变量也可以定义函数。另外以C方式实现 struct 中也可以定义函数。 struct MyBook_C
{void Print(){//……}char book_name[13];double price;
};class MyBook_CPP
{
public:void Print(){……}
private:char* book_name;double price;
};int main()
{MyBook_C book1;MyBook_CPP book2;return 0;
}访问限定符
public公有可以被访问的→ struct 默认protected受保护的private私有不可被访问的 → class 默认
class 中“类的成员”默认私有在 class 类域外不可访问。 访问限定符的作用域从该访问限定符到下一个访问限定符或结束。 类内不受访问限定符的限制
注意访问限定符只在编译时有用当数据映射到内存后没有任何访问限定符上的区别 2. 类成员函数的声明和定义分离_member function
类被定义之后会形成类域。函数声明与定义分离需要指明类域。在类内定义的函数默认是内联函数代码量小、比较简单的函数一般直接在类中定义。 3. 类成员变量的命名_Conventions
class Date
{
public:void Init(int year 0, int month 0, int day 0){year year;month month;day day;//局部变量优先这里的操作是自己赋值给自己}
private:int year;int month;int day;
};所以建议有所区分地命名 例如
class Date
{
public:void Init(int year 0, int month 0, int day 0){_year year;_month month;_day day;}
private:int _year;int _month;int _day;
};4. sizeof(class)
类的实例化→对象 类对象的大小_空类
class classname{ functions ; variables } 成员函数 functions 对于对象来说就像一个小区的公共区域它们被存放在公共代码区代码段成员变量 variables 类实例化之后要存储数据对每一个实例化出来的对象都是私有的并且这些变量遵循C语言的内存对齐规则决定了 sizeof(classname) 的大小。如下图所示。 C语言 结构体内存对齐规则
第一个成员在与结构体偏移量为0的地址处。其他成员变量要对齐到某个数字对齐数的整数倍的地址处。 注意对齐数 编译器默认的一个对齐数与该成员大小的较小值。 VS中默认的对齐数为8。结构体总大小为最大对齐数所有变量类型最大者与默认对齐参数取最小的整数倍。 如果嵌套了结构体的情况嵌套的结构体对齐到自己的最大对齐数的整数倍处结构体的整体大小就是所有最大对齐数含嵌套结构体的对齐数的整数倍。 总结size of class 测试代码如下
类中由成员变量和成员函数遵循 C语言 内存对齐规则类中只有成员函数1 byte表示占位用于区分并表示实例化的对象空类1 byte表示占位用于区分并表示实例化的对象 class Date
{
public:Date(const int year, const int month, const int day){_year year;_month month;_day day;}
private:int _year;// 0 1 2 3 int _month;// 4 5 6 7 int _day;//8 9 10 11 → 12(内存对齐)
};class Only_functions
{
public:void Print(){cout Only_functions endl;}
};class Empty{};int main()
{cout sizeof(Date) endl;//output:12cout sizeof(Only_functions) endl;//output:1cout sizeof(Empty) endl;//output:1Only_functions o1;o1.Print();cout sizeof(o1) endl;//output:1return 0;
}5.this 指针 warning这里的隐藏的实参和隐藏的形参都不可以显式地写出 。 但是可以在类中显示地用如下代码但一般不会像下面这样写没什么意义 class Date
{
public:void Init(const int year 2023, const int month 1, const int day 1){this-_year year;this-_month month;this-_day day;}
private:int _year;int _month;int _day;
};warningthis 指针是不可被修改的(Type* const this xxxxx)如果对 this 指针本身的内容进行修改会报错。
空指针问题
nullptr - member function → 正常运行(*nullptr).member function → 正常运行 真正发生了对空指针解引用的情况 END
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87161.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!