《C++程序设计POJ》《WEEK3 类和对象进阶》成员对象和封闭类/友元/this指针/常量成员函数
Posted focus-z
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《C++程序设计POJ》《WEEK3 类和对象进阶》成员对象和封闭类/友元/this指针/常量成员函数相关的知识,希望对你有一定的参考价值。
// 构造函数赋值
CTyre(int r, int w):radius(r), width(w)
初始化列表
![技术图片](/img/jia.gif)
#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;
友元
![技术图片](/img/jia.gif)
#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;
Note:
友元类之间的关系
不能传递, 不能继承
A 是 B的友元,B 是 C的友元, 不能推出A与C的友元关系。
this指针
C语言的结构体不能定义成员函数!!!
C++可以
常量成员函数
?在类的成员函数说明后面可以加const关键字,则该成员函数成为常量成员函数。
?常量成员函数执行期间不应修改其所作用的对象。因此,在常量成员函数中不能修改成员变量的值(静态成员变量除外),也不能调用同类的非常量成员函数(静态成员函数除外)
常量成员函数的重载
两个成员函数,名字和参数表都一样,但是一个是const,一个不是,算重载。
![技术图片](/img/jia.gif)
#include<iostream> using namespace std; class CTest private: int n; public: CTest() n = 1; // constructor function int GetValue() const return n; int GetValue() return 2 * n; ; int main() const CTest objTest1; CTest objTest2; cout << objTest1.GetValue() << "," << objTest2.GetValue(); while (1);
常引用
引用前面可以加const关键字,成为常引用。
不能通过常引用,修改其引用的变量
可以用对象的常引用作为参数,如:
class Sample
…
;
void PrintfObj( const Sample & o)
……
这样函数中就能确保不会出现无意中更改o值的语句了。
复制构造函数起作用的三种情况
1. 当用一个对象去初始化同类的另一个对象时。
Complex c2(c1);
Complex c2; //初始化语句,非赋值语句
2. 如果某函数有一个参数是类 A 的对象,
那么该函数被调用时,类A的复制构造函数将被调用
3. 如果函数的返回值是类A的对象时,则函数返回时,
A的复制构造函数被调用:
以上是关于《C++程序设计POJ》《WEEK3 类和对象进阶》成员对象和封闭类/友元/this指针/常量成员函数的主要内容,如果未能解决你的问题,请参考以下文章
C++进阶:继承C++为什么要引入继承 | 继承概念及定义 | 基类和派生类对象赋值转换 | 继承中的作用域 | 派生类的默认成员函数 | 继承与友元/静态成员 | 复杂的菱形继承及菱形虚拟继承
C++进阶:继承C++为什么要引入继承 | 继承概念及定义 | 基类和派生类对象赋值转换 | 继承中的作用域 | 派生类的默认成员函数 | 继承与友元/静态成员 | 复杂的菱形继承及菱形虚拟继承
C++进阶:继承C++为什么要引入继承 | 继承概念及定义 | 基类和派生类对象赋值转换 | 继承中的作用域 | 派生类的默认成员函数 | 继承与友元/静态成员 | 复杂的菱形继承及菱形虚拟继承
C++进阶:继承C++为什么要引入继承 | 继承概念及定义 | 基类和派生类对象赋值转换 | 继承中的作用域 | 派生类的默认成员函数 | 继承与友元/静态成员 | 复杂的菱形继承及菱形虚拟继承