首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++C++ this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )

一、常量成员函数 1、const 修饰成员函数分析 在 C++ 中 , 普通非静态成员函数 , 可以使用 const 进行修饰 , 在 下面的 Student 中 , 定义了 void fun(int...在 * 右边修饰是指针本身 ; 代码示例 : class Student { public: // 使用 const 修饰 成员函数 // const 关键字可以 // 在 void...const int age; // 年龄 const int height; // 身高 如果 成员函数 被 const 关键字 声明为 常量成员函数 , 则在该函数中 不能修改 对象中 任何成员变量...= height; } public: int age; // 年龄 int height; // 身高 }; 3、错误代码示例 - 常量成员函数修改成员变量 错误代码示例 : class..." << endl; } ~Student() { cout << "执行 Student 析构函数" << endl; } // 使用 const 修饰 成员函数 // const

18520
您找到你想要的搜索结果了吗?
是的
没有找到

C++修行之道】和对象(五)日期实现、const成员、取地址及const和取地址操作符重载

效率:返回引用避免了不必要创建和返回对象拷贝。在C++中,对象复制可能是一个昂贵操作。 链式操作:通过返回引用,可以支持链式操作。...原始数据没有影响。 前置++和后置++都是一元运算符,为了让前置++与后置++形成能正确重载 C++规定:后置++重载时多增加一个int类型参数,但调用函数时该参数不用传递,编译器自动传递。...二、const成员const修饰成员函数”称之为const成员函数,const修饰成员函数,实际修饰该成员函数隐含this指针,表明在该成员函数中不能对任何成员进行修改。...3. const成员函数内可以调用其它const成员函数吗? 不可以。在const成员函数中,不能直接调用同一个const成员函数。...但这种做法是不推荐,因为它破坏了const正确性和对象常量性质,可能导致未定义行为或程序错误。通常来说,应该尽量避免这种做法。

8010

C++】继承 ③ ( 继承一些重要特性 | 子类拥有父所有成员 | 多态性 | 子类可以拥有父没有成员 | 代码示例 )

一、继承一些重要特性 1、子类拥有父所有成员 子类 继承 父 , 则 子类 拥有 父 所有 成员变量 和 成员函数 ; 这里要注意 : 子类 拥有 父 私有成员 , 但是 子类不能 直接访问...父 私有成员 , 必须通过 父 公有或受保护 成员函数 访问 父 私有成员 ; 子类 不能访问 父 私有成员 , 并不代表 子类 中没有 私有成员 ; 下面的 Parent...父 私有成员 ; Child c; c.publicFunChild(); // 间接调用父 私有成员 c.callPrivateFun(); 2、子类可以拥有父没有成员...子类 可以 在 继承自 父 成员变量 和 成员函数 基础上 , 定义 其它 成员变量 和 成员函数 ; 因此 , 子类 可以 拥有 父没有成员变量 和 成员函数 ; 在下面的代码中...= c , 该操作执行正常 , 并没有报错 ; 调用 c2.publicFun() 代码 , 访问 父 publicFun 函数 , 该操作正常执行 ; 说明 子类对象 可以当做 父对象 使用

43430

《挑战30天C++入门极限》C++面向对象编程入门:(class)

C++面向对象编程入门:(class)   上两篇内容我们着重说了结构体相关知识操作。   ...但是大家注意到没有,标准c中是不允许在结构体中声明函数,但c++可以,这一点就和c有了本质区别,很好体现了c++面向对象特点!   ...,但要注意是,在内部必须预先声明: void test::rp()   在函数类型后面加上名称再加上域区分符(::)再加函数名称,利用这样方法我们就在外部建立了一个名为rptest...,为了避免这种情况发生,所以c++是允许在外部定义成员函数(方法),将定义和其它成员函数定义分开,是面向对象编程通常做法,我们把定义在这里也就是头文件了看作是外部接口,成员函数定义看成是内部实现...c++规定:   1.一个名字不能同时设置为两种不同类型 class test { //... }; typedef int test; 这个就是错误!

67510

C++必知必会之基础知识-常用关键(3)

START 位域 在C++中,位域(bit fields)是一种特殊数据结构,允许将结构体或成员变量按位进行分配。...以下是一个简单例子,演示了C++中位域使用: #include class MyFlags { public: MyFlags() : isRed(0), isGreen...需要注意是,extern "C"应该只用于C和C++之间函数和全局变量声明,而不应该用于定义和成员函数。因为成员函数涉及到C++特性,无法通过简单名称修饰解决链接问题。...struct 在C++中,struct是用于定义自定义数据类型关键字,它是一种用户定义数据结构,可以包含不同类型成员变量和成员函数。struct与class非常相似,但有一些不同之处。...由于union没有记录当前存储数据类型,所以在使用时需要确保正确理解其成员含义,并避免出现未定义行为。一般来说,union应该在需要特殊内存布局和节省内存时才使用,并且应该小心处理其中数据。

12730

hpp头文件与h头文件区别 C++.hpp文件

4、是一般模板头文件。 5、一般来说,*.h里面只有声明,没有实现,而*.hpp里声明实现都有,后者可以减少.cpp数量。...在.h和.cpp场景中,当两个或者多个之间有循环调用关系时,只要预先在头文件做被调用声明即可,如下: class B; class A{ public:...同理,对于当两个A和B分别定义在各自hpp文件中,形如以下循环调用也将导致编译错误: //a.hpp #include "b.hpp" class A{ public...静态成员使用限制在于如果类含有静态成员,则在hpp中必需加入静态成员初始化代码,当该hpp被多个文档include时,将产生符号重定义错误。...唯一例外是const static整型成员,因为在vs2003中,该类型允许在定义时初始化,如: class A{ public: const static int intValue

4K20

C++静态成员变量和静态成员函数小结

举例如下: xxx.h文件 class base{ private: static const int _i;//声明,标准c++支持有序类型在体中初始化,但vc6不支持。...但是对于这条规则比较例外是静态数据成员为整型或者枚举型const时候可以在声明中进行初始化。  2.静态数据成员所有对象所共享,包括该类派生对象。...★这个特性,我不知道是属于标准c++特性,还是vc6自己特性。 静态数据成员值在const成员函数中可以被合法改变。...} }; int base::_staticVal=0; 二,静态成员函数 静态成员函数没有什么太多好讲。...举例如下: class base{ virtual static void func1();//错误 static void func2() const;//错误 static void func3

1.8K50

《挑战30天C++入门极限》C++面向对象编程入门:构造函数与析构函数

上一个教程我们简单说了关于一些基本内容,对于对象成员初始化我们始终是建立成员函数然后手工调用该函数对成员进行赋值,那么在c++中对于来说有没有更方便方式能够在对象创建时候就自动初始化成员变量呢...关于c++成员初始化,有专门构造函数来进行自动操作而无需要手工调用,在正式讲解之前先看看c++对构造函数一个基本定义。   ...c++规定如果一个对象是另外一数据成员,那么在创建对象时候系统将自动调用那个构造函数。   下面我们看一个例子。   ...析构函数定义:析构函数也是特殊成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载,只有在对象生命期结束时候,由系统自动调用。   ...这一个问题是成员初始化比较尴尬一个问题,是不是就没有办法解决了呢?呵呵。。。。。。   c++为了解决此问题,有一个很独特方法,下一小节我们将介绍。

63730

Objective-C Runtime 一些基本使用

获取成员变量 我们可以发现获取方法,属性过程基本一致:通过元获取方法列表或属性列表,然后在进行遍历。...编译错误,提示实例变量无法添加到分类中,用正常方法确实无法在分类中添加属性。 但是可以通过Runtim机制进行“添加”。其本质是给这个添加属性关联,而非把这个属性添加到中。...:T@"NSString",&,N 没有成员变量 _name,进一步说明分类中不能添加成员变量!...这里我们先使用 class_addMethod() 在中添加方法,若返回Yes说明没有该方法,然后再使用 class_replaceMethod() 方法进行取代;若返回NO,说明中有该方法,...cls = [self class]; // 遍历本类和父变量 while (cls) { //获取所有成员变量 unsigned int

1.2K80

第 19 章 特殊工具与技术

第二步,编译器调用名为 operator delete标准库函数释放内存空间。...不过也可以专门指定某些成员值,其值不一定唯一。如果没有显式提供初始值,否则当前枚举成员值等于之前枚举成员值加 1。...class Screen { public: // data是一个静态成员,返回一个成员指针 static const std::string Screen::*data()...在局部类中也不允许声明静态数据成员,因为没法定义这样成员。 外层函数对局部类私有成员没有任何访问特权。 局部类只能访问外层作用域定义类型名、静态变量以及枚举成员。...class Nested; // 声明嵌套 Nested }; // 定义嵌套 Nested,所有成员都要在 Nested内部定义 class Bar::Nested {

72440

第 19 章 特殊工具与技术

第二步,编译器调用名为 operator delete标准库函数释放内存空间。...不过也可以专门指定某些成员值,其值不一定唯一。如果没有显式提供初始值,否则当前枚举成员值等于之前枚举成员值加 1。...class Screen { public: // data是一个静态成员,返回一个成员指针 static const std::string Screen::*data()...在局部类中也不允许声明静态数据成员,因为没法定义这样成员。 外层函数对局部类私有成员没有任何访问特权。 局部类只能访问外层作用域定义类型名、静态变量以及枚举成员。...class Nested; // 声明嵌套 Nested }; // 定义嵌套 Nested,所有成员都要在 Nested内部定义 class Bar::Nested {

80550

C++面向对象程序设计》✍千处细节、万字总结(建议收藏)「建议收藏」

最初他把这种新语言称为“含C”,到1983年才取名为C++。 相比C语言,C++主要特点是增加了面向对象机制。...const 对象名[(参数表)]; const Date date(2021, 5, 31); 常对象成员 1、常数据成员 数据成员可以是常量或常引用,使用const说明数据成员称为常数据成员...在没有虚函数情况下,如果在派生中定义了与基成员同名成员,则称派生成员覆盖了基同名成员,在派生中使用这个名字意味着访问在派生中声明成员。...: 妈妈喜欢月季 女儿喜欢百合 C++规定,如果在派生中,没有用virtual显式地给出虚函数声明,这时系统就会遵循以下规则来判断一个成员函数是不是虚函数:该函数与基虚函数是否有相同名称、参数个数以及对应参数类型...C++输入输出系统比C语言更安全、可靠。 c++输入/输出系统明显地优于C语言输入/输出系统。首先,它是类型安全、可以防止格式控制符与输入输出数据类型不一致错误

3.1K40

2W五千字C++基础知识整理汇总

C++ 进一步扩充和完善了 C 语言,最初命名为C,后来在 1983 年更名为 C++C++ 是 C 一个超集,事实上,任何合法 C 程序都是合法 C++ 程序。...这实际上并没有定义任何数据,但它定义了名称意味着什么,也就是说,它定义了对象包括了什么,以及可以在这个对象上执行哪些操作。 定义是以关键字 class 开头,后跟名称。...如果我们定义上面的函数为成员函数,那么我们需要为每次操作传递两个参数,如下所示: Box operator+(const Box&, const Box&); 下面的实例使用成员函数演示了运算符重载概念...私有部分对使用类型代码隐藏了实现细节。 访问标签出现频率没有限制。每个访问标签指定了紧随其后成员定义访问级别。指定访问级别会一直有效,直到遇到下一个访问标签或者遇到主体关闭右括号为止。...实现可能随着时间推移而发生变化,以便应对不断变化需求,或者应对那些要求不改变用户级代码错误报告。 如果只在私有部分定义数据成员,编写该类作者就可以随意更改数据。

2.6K10

一文让你学完C++,干货收藏!!!

C++ 进一步扩充和完善了 C 语言,最初命名为C,后来在 1983 年更名为 C++C++ 是 C 一个超集,事实上,任何合法 C 程序都是合法 C++ 程序。...这实际上并没有定义任何数据,但它定义了名称意味着什么,也就是说,它定义了对象包括了什么,以及可以在这个对象上执行哪些操作。 定义是以关键字 class 开头,后跟名称。...如果我们定义上面的函数为成员函数,那么我们需要为每次操作传递两个参数,如下所示: Box operator+(const Box&, const Box&); 下面的实例使用成员函数演示了运算符重载概念...私有部分对使用类型代码隐藏了实现细节。 访问标签出现频率没有限制。每个访问标签指定了紧随其后成员定义访问级别。指定访问级别会一直有效,直到遇到下一个访问标签或者遇到主体关闭右括号为止。...实现可能随着时间推移而发生变化,以便应对不断变化需求,或者应对那些要求不改变用户级代码错误报告。 如果只在私有部分定义数据成员,编写该类作者就可以随意更改数据。

2.9K3029

一文让你学完C++,干货收藏!!!

C++ 进一步扩充和完善了 C 语言,最初命名为C,后来在 1983 年更名为 C++C++ 是 C 一个超集,事实上,任何合法 C 程序都是合法 C++ 程序。...这实际上并没有定义任何数据,但它定义了名称意味着什么,也就是说,它定义了对象包括了什么,以及可以在这个对象上执行哪些操作。 定义是以关键字 class 开头,后跟名称。...如果我们定义上面的函数为成员函数,那么我们需要为每次操作传递两个参数,如下所示: Box operator+(const Box&, const Box&); 下面的实例使用成员函数演示了运算符重载概念...私有部分对使用类型代码隐藏了实现细节。 访问标签出现频率没有限制。每个访问标签指定了紧随其后成员定义访问级别。指定访问级别会一直有效,直到遇到下一个访问标签或者遇到主体关闭右括号为止。...实现可能随着时间推移而发生变化,以便应对不断变化需求,或者应对那些要求不改变用户级代码错误报告。 如果只在私有部分定义数据成员,编写该类作者就可以随意更改数据。

3.3K20

一文让你学完C++,干货收藏!!!

C++ 进一步扩充和完善了 C 语言,最初命名为C,后来在 1983 年更名为 C++C++ 是 C 一个超集,事实上,任何合法 C 程序都是合法 C++ 程序。...这实际上并没有定义任何数据,但它定义了名称意味着什么,也就是说,它定义了对象包括了什么,以及可以在这个对象上执行哪些操作。 定义是以关键字 class 开头,后跟名称。...如果我们定义上面的函数为成员函数,那么我们需要为每次操作传递两个参数,如下所示: Box operator+(const Box&, const Box&); 下面的实例使用成员函数演示了运算符重载概念...私有部分对使用类型代码隐藏了实现细节。 访问标签出现频率没有限制。每个访问标签指定了紧随其后成员定义访问级别。指定访问级别会一直有效,直到遇到下一个访问标签或者遇到主体关闭右括号为止。...实现可能随着时间推移而发生变化,以便应对不断变化需求,或者应对那些要求不改变用户级代码错误报告。 如果只在私有部分定义数据成员,编写该类作者就可以随意更改数据。

2.3K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券