《C++程序设计POJ》《WEEK3 类和对象进阶》成员对象和封闭类/友元/this指针/常量成员函数...

// 构造函数赋值

CTyre(int r, int w):radius(r), width(w) { }

初始化列表

#include<iostream>
using namespace std;
/*成员对象和封闭类
成员对象: 一个类的成员变量是另一个类的对象
包含 成员对象 的类叫 封闭类 (Enclosing)
*/
class CTyre
{
private:int radius;int width;
public:CTyre(int r, int w) :radius(r), width(w) {} //初始化列表
};class CEngine
{};class CCar
{
private:int price;CTyre tyre;CEngine engine;
public:CCar(int p, int tr, int tw);
};CCar::CCar(int p, int tr, int w) :price(p), tyre(tr, w) {}int main()
{CCar car(20000, 17, 225);return 0;
}
View Code

友元

#include<iostream>class CCar; //提前声明 CCar类, 以便后面CDriver类使用
class CDriver
{
public:void ModifyCar(CCar * pCar); //改装汽车

};class CCar
{
private:int price;friend int MostExpensiveCar(CCar cars[], int total); //声明友元friend void CDriver::ModifyCar(CCar* pCar); //声明友元
};void CDriver::ModifyCar(CCar *pCar)
{pCar->price += 1000; //汽车改装后价值增加

}int MostExpensiveCar(CCar cars[], int total) //求最贵汽车的价格
{int tmpMax = -1;for (int i = 0; i < total; ++i)if (cars[i].price > tmpMax)tmpMax = cars[i].price;return tmpMax;
}
int main()
{return 0;
}
View Code

Note:
友元类之间的关系
不能传递, 不能继承

A 是 B的友元,B 是 C的友元, 不能推出A与C的友元关系。

 

this指针

C语言的结构体不能定义成员函数!!!

C++可以

 

 

常量成员函数
在类的成员函数说明后面可以加const关键字,则该成员函数成为常量成员函数。
常量成员函数执行期间不应修改其所作用的对象。因此,在常量成员函数中不能修改成员变量的值(静态成员变量除外),也不能调用同类的非常量成员函数(静态成员函数除外)

 

常量成员函数的重载

两个成员函数,名字和参数表都一样,但是一个是const,一个不是,算重载。

#include<iostream>
using namespace std;class CTest
{
private:int n;
public:CTest() { n = 1; } // constructor functionint GetValue() const { return n; }int GetValue() { return 2 * n; }
};int main()
{const CTest objTest1;CTest objTest2;cout << objTest1.GetValue() << "," << objTest2.GetValue();while (1);{}
}
View Code

 

常引用

引用前面可以加const关键字,成为常引用。
不能通过常引用,修改其引用的变量

 

可以用对象的常引用作为参数,如:
class Sample {

};
void PrintfObj( const Sample & o)
{
……
}
这样函数中就能确保不会出现无意中更改o值的语句了。

复制构造函数起作用的三种情况

 

1. 当用一个对象去初始化同类的另一个对象时。
Complex c2(c1);
Complex c2;  //初始化语句,非赋值语句

 

2. 如果某函数有一个参数是类 A 的对象,
那么该函数被调用时,类A的复制构造函数将被调用

3. 如果函数的返回值是类A的对象时,则函数返回时,
A的复制构造函数被调用:

转载于:https://www.cnblogs.com/focus-z/p/10992077.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-17325.html

如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网进行投诉反馈,一经查实,立即删除!


相关文章:

  • 第7.3节 Python特色的面向对象设计:协议、多态及鸭子类型
  • NOIP Day -151
  • 微信小游戏排行榜设计技术梳理
  • Luogu P1967 货车运输 倍增+最大生成树
  • django路由层 虚拟环境 视图层
  • 基本操作2-常用命令
  • IdentityServer4学习及简单使用
  • centos出现“FirewallD is not running”
  • 数组去重(1)
  • mybatis 的 dao 接口跟 xml 文件里面的 sql 是如何建立关系的?
  • Gitlab 服务器搭建
  • vuejs开发流程
  • R语言--自定义函数证明中心极限定理
  • 为什么静态方法中不可以直接访问非静态方法?
  • 27. Remove Element[E]移除元素
  • c++消息中间件
  • MAC中已有的虚拟环境在pycharm 中进行调用
  • day21-2 类的派生
  • 听说你在学Python?来点PEP吧
  • Bristol的第6篇密码学
  • 【牛客网】Whalyzh's Problem
  • Fastlane基础介绍
  • PJzhang:python快速搭建局域网文件共享服务器
  • OO终章
  • 05-Vue报错 Uncaught SyntaxError: Identifier has already been declared和路由
  • [Vue] : vue-resource 实现 get, post, jsonp请求
  • 基本数据类型与引用数据类型
  • 11. 判断是给属性前加typeof 可以同时判断属性是否存在
  • 高并发 问题怎么解决
  • js(一) 三大事件 实现注册验证
  • SpringCloud学习(SPRINGCLOUD微服务实战)一
  • linux kprobe rootkit学习
  • 区块链学习(二)以太坊私有链搭建
  • 两个json对象合并为一个json对象
  • (四) Docker 常用帮助命令
  • GPU图形绘制管线简介
  • 爬虫二 cookie正则
  • ubuntu自带截图工具
  • Codeforces Round #569 (Div. 2)A. Alex and a Rhombus
  • jquery以及jquery对象介绍
  • java-循环变量定义问题
  • 微信小程序-day1
  • 朱石景 201671010457 团队项目评审课程学习总结
  • java web中的相对路径和绝对路径
  • django视图(views)
  • rabbitmq 发送的用户名是什么
  • 网络编程里通用常识
  • 构建和管理容器的10个技巧
  • pytest(2) pytest与unittest的区别
  • linux命令学习_实验楼(一)