c++从入门到精通——面向对象初探以及友元函数、对象
面向对象
- 每个对象内存地址独一无二,空对象分配一个字节空间
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class Person{
public:
// int m_A;void func(){}
// static int m_B;static void fun2(){};
// double m_C;
};
//int Person::m_B = 0 ;
void test01(){Person p1;cout<<"size="<< sizeof(p1)<< endl;
};
int main() {test01();
// system("pause");return EXIT_SUCCESS;
}
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class Person{
public:int m_A;void func(){}static int m_B;static void fun2(){};double m_C;
};
int Person::m_B = 0 ;
void test01(){Person p1;cout<<"size="<< sizeof(p1)<< endl;
};
int main() {test01();
// system("pause");return EXIT_SUCCESS;
}
this 指针的使用
- 解决名字相同的冲突
- 隐式加在每个成员函数中
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;class Person
{
public:Person(int age){//用途1 :解决名称冲突this->age = age;}//this指针 隐式加在每个成员函数中bool compareAge(Person &p){if (this->age == p.age){return true;}return false;}Person& personAddPerson(Person &p){this->age += p.age;return *this; //*this 就是本体}int age;
};void test01()
{//this指针 指向 被调用的成员函数 所属的对象Person p1(10);cout << "p1的年龄为: " << p1.age << endl;Person p2(10);bool ret = p1.compareAge(p2);if (ret){cout << "p1与p2年龄相等" << endl;}p1.personAddPerson(p2).personAddPerson(p2).personAddPerson(p2); //链式编程cout << "p1的年龄为: " << p1.age << endl;}
int main(){test01();system("pause");return EXIT_SUCCESS;
}
空指针访问成员函数
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;class Person
{
public:Person(int age){//用途1 :解决名称冲突this->age = age;}//this指针 隐式加在每个成员函数中bool compareAge(Person &p){if (this->age == p.age){return true;}return false;}Person& personAddPerson(Person &p){this->age += p.age;return *this; //*this 就是本体}int age;
};void test01()
{//this指针 指向 被调用的成员函数 所属的对象Person *p = NULL;cout<<p->age<<endl;}
int main(){test01();system("pause");return EXIT_SUCCESS;
}
常函数和常对象
- 常对象只能调用常函数
- 常函数中不可修改,但是可以通过mutable 修改
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;class Person
{
public:int age{0};mutable int m_A; // 常函数中或者常对象,有些特殊属性依然想修改,加入关键字mutable;Person(int age){this->age = age;}// 指针的指向不可修改,指针指向的值可以修改void showPerson() const{m_A =100;cout<< this->m_A<<endl;}void func(){age = 100;cout<<"func调用"<<endl;}
};
void test01()
{// 常对象声明,常对象调用常函数const Person p1(100);p1.m_A = 100;}
int main(){test01();
// system("pause");return EXIT_SUCCESS;
}
友员函数
- 提供访问私有变量的机会
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include <string>
using namespace std;class Person
{friend void sayAge(Person *p);
public:int age{0};mutable int m_A; // 常函数中或者常对象,有些特殊属性依然想修改,加入关键字mutable;Person(int age){this->age = age;}// 指针的指向不可修改,指针指向的值可以修改void showPerson() const{m_A =100;cout<< this->m_A<<endl;}void func(){age = 100;cout<<"func调用"<<endl;}
private:string name = "人";
};
void test01()
{// 常对象声明,常对象调用常函数const Person p1(100);p1.m_A = 100;Person *p2 = new Person(10) ;sayAge(p2);}
void sayAge(Person *p){cout<<p->name<<endl;
}
int main(){test01();
// system("pause");return EXIT_SUCCESS;
}
友元类
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include <string>
class Building;
class GoodGay
{
public:GoodGay();void visit();Building * m_building;
};class Building
{//让goodGay类作为 Building的好朋友,可以访问私有成员friend class GoodGay;public:Building();string m_SittingRoom;private:string m_BedRoom;
};Building::Building()
{this->m_SittingRoom = "客厅";this->m_BedRoom = "卧室";
}GoodGay::GoodGay()
{this->m_building = new Building;
}void GoodGay::visit()
{cout << "好基友正在访问: " << this->m_building->m_SittingRoom << endl;cout << "好基友正在访问: " << this->m_building->m_BedRoom << endl;
}void test01()
{GoodGay gg;gg.visit();
}int main(){test01();system("pause");return EXIT_SUCCESS;
}
成员函数作为友元函数
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include <string>
class Building;
class GoodGay
{
public:GoodGay();void visit(); //可以访问building的私有void visit2(); // 不可以访问building的私有Building * m_building;
};class Building
{//让GoodGay类中的 visit成员函数作为友元friend void GoodGay::visit();
public:Building();string m_SittingRoom;private:string m_BedRoom;
};Building::Building()
{this->m_SittingRoom = "客厅";this->m_BedRoom = "卧室";
}GoodGay::GoodGay()
{this->m_building = new Building;
}void GoodGay::visit()
{cout << "好基友正在访问: " << this->m_building->m_SittingRoom << endl;cout << "好基友正在访问: " << this->m_building->m_BedRoom << endl;
}void GoodGay::visit2()
{cout << "好基友正在访问: " << this->m_building->m_SittingRoom << endl;//cout << "好基友正在访问: " << this->m_building->m_BedRoom << endl;
}void test01()
{GoodGay gg;gg.visit();gg.visit2();
}int main(){test01();system("pause");return EXIT_SUCCESS;
}
c++从入门到精通——面向对象初探以及友元函数、对象相关推荐
- Simulink仿真入门到精通(十) S函数
Simulink仿真入门到精通(十) S函数 10.1. S函数的概述 10.2 S函数的类型 10.3 S函数的要素 10.4 S函数的组成及执行顺序 10.5 使用不同的语言编写S函数 10.5. ...
- oracle从入门到精通(4)------运算符,分组查询,函数
oracle入门到精通(4) --------------------------------------------- 1.运算符 2.分组查询 3.函数 --------------------- ...
- 【OpenGL从入门到精通(六)】纹理对象与纹理坐标
1.在OpenGL想要显示一张图片,需要先绘制一个自定义的几何体. 2.把图片加载到纹理对象中= 3.当进行纹理贴图时候,使用纹理坐标来设置纹理对象. 2.
- Python实战从入门到精通第十八讲——改变对象的字符串显示
想改变对象实例的打印或显示输出,让它们更具可读性. 要改变一个实例的字符串表示,可重新定义它的 __str__() 和 __repr__() 方法.例如: lass Pair:def __init__ ...
- 【PHP】最详细PHP从入门到精通(二)——PHP中的函数
PHP从入门到精通 之PHP中的函数 各位开发者朋友大家好,自上次更新PHP的相关知识,得到了大家的广泛支持.PHP的火爆程度不言而喻,函数作为PHP中极为重要的部分,应诸位的支持,博主继续跟进更新 ...
- coreldraw x8段落_CorelDRAW X8中文版从入门到精通
CorelDRAW X8中文版从入门到精通 ◎内容结构 ◎编写特色 ◎读者对象 如何获取云空间资料 一 扫描关注微信公众号 二 获取资料下载地址和密码 三 打开资料下载页面 四 输入密码并下载资料 1 ...
- 手牵手教你写代码,从入门到精通
如果说到什么是好代码,我们肯定都能说出一堆规则,例如使用一致的格式和缩进.使用清晰的变量名和方法名.在必要时提供文档与注释.不要过度精简代码等等. 但是对于什么是烂代码,你有比较清晰的认识吗? 在 G ...
- 视频教程-JSP从入门到精通2016+在线视频教学平台项目实训-其他
JSP从入门到精通2016+在线视频教学平台项目实训 19年软件开发经验,设计开发40多个大型软件,10年从事高等教育,主要为java系列课程,带你轻松进入java生涯. 赖国荣 ¥68.00 立即订 ...
- 《C++ 开发从入门到精通》——第2章 C++的重要特质分析2.1 什么是面向对象(object-oriented)...
本节书摘来自异步社区出版社<C++ 开发从入门到精通>一书中的第2章,第2.1节,作者: 王石磊 , 韩海玲,更多章节内容可以访问云栖社区"异步社区"公众号查看. 第2 ...
最新文章
- 攻和防谁更厉害?AI技术在恶意软件检测中的应用和对抗
- express不是内部或外部命令,也不是可运行的程序
- postman模拟HTTP请求
- 让浏览器变身代码编辑器
- C语言博客作业--结构体
- 设置 Xcode 自动生成代码片段
- PASCAL不仅仅是语言
- mysql 通过存储过程 插入测试百万数据
- 人工智障学习笔记——机器学习(12)LDA降维
- android侧滑菜单ui,Android:UI控件DrawerLayout、Fragment、SlidingLayout侧滑菜单
- SQL 全文索引 CONTAINS
- excel文件压缩 定位条件 对象
- vue 抽离公共方法
- 斯托克斯公式(三维中两类曲面和第二类曲线互相转换)
- 大案牍术——我们或是只是一串数字
- 吕 思 伟 ---- 潘 爱 民 :: ATL 介 绍( 三)
- Java50道经典编程题:(十三)数字谜题 ——循环语句及判断符的使用
- vue3.0移动端 ui_vue.js的移动UI元素
- 解决网站加载图片太慢
- 使用 logrotate 配置 supervisor 进行日志管理按天备份
热门文章
- WMS WFS WCS 的区别
- 关于MongoCollection.find(Bson var1)方法的问题
- 【贝店】2019-让更多人过上更好生活。
- 智慧校园对教学的影响是什么?
- 达梦数据库DSC搭建
- 数据库设计之EAV(实体、属性、值)
- 面向对象高级编程(上)-- 第一周学习笔记(Boolan)
- python高考谣言_新浪微博中文谣言数据
- C语言:根据整型形参m的值,计算如下公式的值: T=1-1/2x2-1/3x3...1/mxm; 例如,若m中的值为5,则应输出:0.536389。
- IC设计- 浅谈各种验证 - 功能验证,形式验证,原型验证