《新标准C++程序设计》2.4-2.6(C++学习笔记4)
1、对象的内存匹配
一般来说,在C++中,一个对象占用的内存空间大小等于其成员变量所占用的内存空间的大小之和。(对象只包含成员变量,不包含成员函数)
每个对象都有各自的存储空间。一个对象的某个成员变量被改变后,不会影响另一个对象。
2、类的成员变量和成员函数使用方法
①对象名.成员名
②指针->成员名
③引用名.成员名
3、类成员的可访问范围
private:用来指定私有成员。只在该类的成员函数内部才能被访问。
public:用来指定公有成员。在任何地方都可以被访问。
protected:用来指定保护成员。
三种关键字出现的次数和先后次序都没有限制。
如果某个成员前面没有访问范围说明符,则对class来说,该成员默认的被认为是私有成员;对struct来说,该成员默认的被认为是公有成员。
在类的成员函数内部,能够访问:当前对象的全部属性、函数;同类其它对象的全部属性、函数在该类的成员函数以外的地方,只能够访问该类对象的公有成员。
4、隐藏
设置私有成员的机制叫作隐藏。它的一个目的就是强制对成员变量的访问一定要通过成员函数进行。这样的好处是,如果修改了成员变量的类型等属性,只需要更改成员函数即可;否则,所有直接访问成员变量的语句都需要修改。
5、成员函数的重载及参数缺省
成员函数可以重载,可以带缺省参数。使用缺省参数要注意避免有函数重载时的二义性。
6、示例程序剖析
(1)
#include<iostream>
using namespace std;
class CRectangle
{
public:
int w, h; //成员变量,宽度和高度
void init(int w_, int h_); //成员函数,设置宽度和高度
int area(); //成员函数,求面积
int perimeter(); //成员函数,求周长
}; //必须有分号
viod CRectangle::Init(int w_, int h_)
{
w = w_;
h = h_;
}
int CRectangle::area()
{
return w * h;
}
int CRectangle::perimeter()
{
return * (w + h);
}
int main()
{
int w, h;
CRectangle r; //r是一个对象
cin >> w >> h;
r.init(w, h); //调用成员函数,作用于r
cout << "It`s area is " << r.area() << endl;
cout << "It`s perimeter is " << r.perimeter();
cout << sizeof(CRectangle) << endl;
return ;
}
(2)
#include<iostream>
#include<cstring>
using namespace std;
class CEmployee {
private:
char szName[]; //名字
public:
int salary; //工资
void setName(char* name);
void getName(char* name);
void averageSalary(CEmployee e1, CEmployee e2);
};
void CEmployee::setName(char* name) {
strcpy(szName, name); //OK
}
void CEmployee::getName(char* name) {
strcpy(name, szName); //OK
}
void CEmployee::averageSalary(CEmployee e1, CEmployee e2)
{
salary = (e1.salary + e2.salary) / ;
}
int main()
{
CEmployee e;
strcpy(e.szName, "Tom1234567889");//编译出错不能访问私有成员
e.setName("Tom"); //OK
e.salary = ; //OK
return ;
}
《新标准C++程序设计》2.4-2.6(C++学习笔记4)的更多相关文章
- 《新标准C++程序设计》4.5(C++学习笔记15)
实例:长度可变的整型数组类 int main() { //要编写可变长整型数组类,使之能如下使用: CArray a; //开始里的数组是空的 ; i < ; ++i) a.push_back( ...
- 《新标准C++程序设计》4.6(C++学习笔记16)
重载流插入运算符和流提取运算符 流插入运算符:“<<” 流提取运算符:“>>” cout 是在 iostream 中定义的,ostream 类的对象. “<<” 能 ...
- 《新标准C++程序设计》4.4(C++学习笔记14)
运算符重载为友元函数 一般情况下,将运算符重载为类的成员函数,是较好的选择. 但有时,重载为成员函数不能满足使用要求,重载为普通函数,又不能访问类的私有成员,所以需要将运算符重载为友元. class ...
- 《新标准C++程序设计》4.1(C++学习笔记12)
运算符重载的概念和原理 一.运算符重载的需求 C++预定义的“+.-. * ./.%. ^ .&.~.!.|. = .<< >>.!= ”等运算符,只能用于基本数据类型 ...
- 《新标准C++程序设计》3.8(C++学习笔记10)
友元 友元分为友元函数和友元类两种. 一.友元函数 在定义一个类的时候,可以把一些函数(包括全局函数和其它类的成员函数)声明为“友元”,这样那些函数就成为该类的友元函数,在友元函数内部就可以访问该类对 ...
- 《新标准C++程序设计》3.5(C++学习笔记8)
常量对象和常量成员函数 一.常量对象 如果希望某个对象的值初始化后就再也不被改变,则定义该对象时可以在前面加const关键字,使之成为常量对象. class CDemo { private: int ...
- 正确处理类的复合关系------新标准c++程序设计
假设要编写一个小区养狗管理程序,该程序需要一个“主人”类,还需要一个“狗”类.狗是有主人的,主人也有狗.假定狗只有一个主人,但一个主人可以有最多10条狗.该如何处理“主人”类和“狗”类的关系呢?下面是 ...
- 在成员函数中调用虚函数(关于多态的注意事项)------新标准c++程序设计
类的成员函数之间可以互相调用.在成员函数(静态成员函数.构造函数和析构函数除外)中调用其他虚成员函数的语句是多态的.例如: #include<iostream> using namespa ...
- 多态实现的原理------新标准c++程序设计
“多态”的关键在于通过基类指针或引用调用一个虚函数时,编译时不确定到底调用的是基类还是派生类的函数,运行时才确定.例子: #include<iostream> using namespac ...
- 多态的作用-游戏编程展示------新标准c++程序设计
游戏软件的开发最能体现面向对象设计方法的优势.游戏中的人物.道具.建筑物.场景等都是很直观的对象,游戏运行的过程就是这些对象相互作用的过程.每个对象都有自己的属性和方法,不同对象也可能有共同的属性和方 ...
随机推荐
- Unity添加小米游戏SDK
因为游戏要上线小米的平台,所以游戏就要添加小米SDK,整了3天总算是把小米SDK添加上了~~ 多亏找到了这个帖子:Unity3D接入小米盒子SDK. (小米人家论坛有官方贴出来的其他开发者的接入经验~ ...
- hibernate部分源码解析and解决工作上关于hibernate的一个问题例子(包含oracle中新建表为何列名全转为大写且通过hibernate取数时如何不用再次遍历将列名(key)值转为小写)
最近在研究系统启动时将数据加载到内存非常耗时,想着是否有办法优化!经过日志打印测试发现查询时间(查询时间:将数据库数据查询到系统中并转为List<Map>或List<*.Class& ...
- USACO[19-20]Dec银组题解
1,MooBuzz 这题其实是道数学题. 我们先找找符合要求的数:1,2,4,7,8,11,13,14…… 我们发现再往后找都是这8个数中的一个加15k如:16……19……29…… 找规律发现k=n/ ...
- java多条件查询SQL语句拼接的小技巧
问题: 一个界面有个多个文本框输入值(或下拉框)展示的查询条件,也就是组合条件查询,需要在java里面动态拼接SQL,where条件如何写? 解决思路: 在where关键字后面固定写 1=1, 若还有 ...
- Doxygen 注释语法规范
背景 这一块的内容更多的是作为了解,但是可以以这样的规范作为自己的编程注释习惯,提高自己的软实力. Doxygen注释语法 注释格式 块注释建议统一使用 /** -- ***/ 行注释建议统一使用 / ...
- Golang:GOROOT、GOPATH、GOBIN变量的含义
背景 移植完了go以后,在配置变量的时候不太清楚这些变量的含义,找了有关的资料. 使用 go env可以获取 go 有关的环境变量,下面是我的go环境: GO111MODULE="" ...
- ffmpeg 学习:000-概述和库的组成
背景 ffmpeg bin工具 可能无法满足产品的使用,于是需要通过传参调用ffmpeg库,即在通过更底层的方式使用它. FFmpeg 介绍 FFmpeg是领先的多媒体框架,能够解码,编码,转码,复用 ...
- spring事物(一),@EnableTransactionManagement @Transactional 启动解析
1.事物的声明阶段 @EnableTransactionManagement,是我们开启注解事物的第一步,我们来看下这个类为我们干了什么 @Target(ElementType.TYPE) @Rete ...
- Codeforces 591 B:Rebranding
B. Rebranding time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- Python下opencv使用笔记(图像频域滤波与傅里叶变换)
Python下opencv使用笔记(图像频域滤波与傅里叶变换) 转载一只程序喵 最后发布于2018-04-06 19:07:26 阅读数 1654 收藏 展开 本文转载自 https://blog ...