C++入门篇十三
常对象: const Person p1;
不可以调用普通成员函数,除非前面加了函数前面加了const
可以调用常函数
在对象之前加入const修饰 const Person p1;
常函数:void func() const{}
void func() const {} 修饰的是this指针 const Type * const this
不能修改this指针指向的值,age本质上就是this->age,所以不能修改
// 对象.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// #include "pch.h"
#include <iostream>
using namespace std; //常函数和常对象
class Person {
public:
Person() {
//构造中修改属性
//当前对象做的值操作 } //普通成员函数
void show() { }
//常函数
void showinfo() const {//加了const是不允许修改的
//常函数不允许修改
//this->m_A = 32;
this->m_B = ;//这个是可以修改的,下面是加了mutable
cout << "m_a:" << this->m_A << "m_b" << this->m_B << endl;
}
//这个是不可以常函数const修改的,this->m_A
int m_A;
//这个是常函数可以修改的
mutable int m_B;//就算是常函数,还是可以执意修改的,mutable }; void test01() {
Person p1;
p1.showinfo();
p1.m_A = ; //如果是常对象的话,不允许修改属性,但是读是可以的
const Person p2;
//p2.m_A = 434;//读是可以的,写是不可以的
p2.showinfo();//showinfo是常函数,但是show是普通成员函数
} int main() { test01();
}
友元函数:friend,可以设置是可以访问私有权限的,谁是不可以访问私有权限的
#include "pch.h"
#include <iostream>
using namespace std;
#include<string> class Building {
friend void You(Building *building);//把下面的函数声明加进来,在加上一个关键字friend就是友元函数
public:
Building(){
//默认构造
this->centerroom = "客厅";
this->bedroom = "卧室";
} public:
string centerroom;
private:
string bedroom; }; void You(Building *building) {//传过来的是地址,Building *building=&实例对象
cout << "好友访问" << building->bedroom << endl;
cout << "好友访问" << building->centerroom << endl; }; void test01() {
Building *p1 = new Building;
You(p1);//传了一个地址过去
} int main() {
test01(); }

友元类注意:
友元关系不能被继承
友元关系是单向的,类A是类B的朋友,但是类B不一定是类A的朋友
友元关系不具有传递性,类B是类A的朋友,类C是类B的朋友 ,但是类c不一样的是类A的朋友
如果一个类被声明为friend,意味者它不是这个类的成员函数,却可以修改这个类的私有成员,而且必须在类的定义中
而且他是一个特权函数
C++并不是一个完全的面向对象的语言,而是一个混合产品
让整个类做元类,friend class 类名
友元函数(类):friend class 类名字
#include <iostream>
using namespace std;
#include <string> //分文件编写,声明和实现 //友元函数 class Room {
friend class You;
public:
Room() {
this->BedRoom = "卧室";
(*this).CenterRoom = "客厅";
} public:
string CenterRoom;
private:
string BedRoom; }; class You {
public:
//默认会执行有参构造函数
You(Room *p) {
cout << "好友来访问" << p->CenterRoom << endl;
cout << "好友来访问" << (*p).BedRoom << endl;
}
}; void test01() {
Room *p = new Room;//创建一个指针实例对象
You y(p);//有参构造函数
}
int main() {
test01(); }
C++入门篇十三的更多相关文章
- spring boot(一):入门篇
构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...
- .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9977862.html 写在前面 千呼万唤始出来,首先,请允许我长吸一口气!真没想到一份来自28岁老程序员 ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(CMS)-第一章 入门篇-开篇及总体规划
.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划 原文地址:https://www.cnblogs.com/yilezhu/p/9977862.html 写在前面 千呼万唤始出来 ...
- Python入门篇-文件操作
Python入门篇-文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.文件IO常用操作 open:打开 read:读取 write:写入 close:关闭 readlin ...
- Membership三步曲之入门篇 - Membership基础示例
Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 - Membership基础示例 Membership三步曲之进阶篇 - 深入剖析Pro ...
- 1. web前端开发分享-css,js入门篇
关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...
- 一个App完成入门篇(七)- 完成发现页面
第七章是入门篇的倒数第二篇文章了,明天整个APP将进入收官. 本节教程主要要教会大家使用二维码扫描和用do_WebView组件加在html页面. 导入项目 do_WebView组件 扫描功能 自定义事 ...
- [原创]Linq to xml增删改查Linq 入门篇:分分钟带你遨游Linq to xml的世界
本文原始作者博客 http://www.cnblogs.com/toutou Linq 入门篇(一):分分钟带你遨游linq to xml的世界 本文原创来自博客园 请叫我头头哥的博客, 请尊重版权, ...
- 转:OSGi 入门篇:模块层
OSGi 入门篇:模块层 1 什么是模块化 模块层是OSGi框架中最基础的一部分,其中Java的模块化特性在这一层得到了很好的实现.但是这种实现与Java本身现有的一些模块化特性又有明显的不同. 本文 ...
随机推荐
- CentOS系统版本的查看方法
CentOS系统版本的查看方法 查看操作系统版本 1 [root@aliyun ~]# lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noa ...
- MyBatis 3源码解析(四)
四.MyBatis 查询实现 Employee empById = mapper.getEmpById(1); 首先会调用MapperProxy的invoke方法 @Override public O ...
- 内核调试打印dump_stack
https://blog.csdn.net/dragon101788/article/details/9419175 在函数中加入dump_stack函数 需要包含的头文件: #include < ...
- Delphi 获取DataSet传入参数后的SQL命令
ClientDataSet1.CommandText := sSQL; ClientDataSet1.Params.Clear; ClientDataSet1.CommandText :='SEL ...
- CSS绝对定位元素居中的几种方法
转载自-CSS居中绝对https://www.cnblogs.com/skura23/p/6530556.html 作者:PajamaCat 1,div宽度未知1 <body> <d ...
- IFE第二天
HTML是超文本标记语言,HTML5是下一代的HTML标准. HTML元素是组成HTML文档的部分,HTML属性为HTML元素提供附加信息. 文档类型<!DOCTYPE>声明帮助浏览器正确 ...
- vue关于为空使用默认值
参考地址:https://segmentfault.com/q/1010000009898107/a-1020000009898747 实现效果如下:
- maven私服nexus清理释放磁盘空间
应用背景: 自建的maven私服(或者叫私仓)nexus在使用过程中,因很多服务不断迭代更新上传jar包至nexus中,底层存放在一个叫Blob Stores的存储中,最近发现该存储已增大至好几百G, ...
- (转)学习HTML5 Canvas这一篇文章就够了
作者:做人要厚道2013 原文:https://blog.csdn.net/u012468376/article/details/73350998
- POJ 3666 Making the Grade (动态规划)
Description A straight dirt road connects two fields on FJ's farm, but it changes elevation more tha ...