《新标准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++程序设计
游戏软件的开发最能体现面向对象设计方法的优势.游戏中的人物.道具.建筑物.场景等都是很直观的对象,游戏运行的过程就是这些对象相互作用的过程.每个对象都有自己的属性和方法,不同对象也可能有共同的属性和方 ...
随机推荐
- Vue方法中修改数组某一项元素而不能响应式更新
<template> <div> <ul> <li v-for="(item, i) in ms" :key="i"& ...
- JavaScript 词法句法
JavaScript 中的几个重要概念 JavaScript 遵循 ECMA-262 规范,目前其最新版是 ECMAScript 2018,而获得所有主流浏览器完全支持的则是 ECMAScript 5 ...
- AngularJS1.X版本基础
AngularJS 知识点: DataBinding Providers Validators Directives Controllers Modules Expressions Factori ...
- Concurrent包下用过哪些类?
1.executor接口,使用executor接口的子接口ExecutorService用来创建线程池2.Lock接口下的ReentrantLock类,实现同步,比如三个线程循环打印ABCABCABC ...
- Spark Storage 模块
http://jerryshao.me/architecture/2013/10/08/spark-storage-module-analysis/ 大神写的太好了,我就不重复造轮子了. Spark ...
- Docker commit 命令
docker commit :从容器创建一个新的镜像. 语法 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] OPTIONS说明: -a :提 ...
- python手动实现深拷贝
深拷贝是将对象全拷贝,包括嵌套对象 def deepcopy(cls): if isinstance(cls, dict): dct = {} for k, v in cls.items(): dct ...
- gem5-gpu 选项解释
‘--split’ ,该项用于模拟独立显卡,GPU与CPU不在同一芯片上,两者的内存物理上隔绝,使用PCI-Express连接. ‘--access-host-pagetable’,该项用于模拟集成显 ...
- win10热键体验
Alt+Tab: 横向显示正在执行的进程 Win+Tab: 3D形式展示正在执行的进程 Win+D:返回桌面(逃领导查电脑和放窥屏尴尬) Win+R: run(直接打开文件开始运行) crtl+Alt ...
- 09 MySQL字符集
字符集的选择 1.数据库方面最流行的是UTF-8 2.如果只考虑支持汉字,那么使用GBK,毕竟GBK下,每个汉字只占用2个字节,而UTF-8需要3个字节. 3.如果需要做大量的 ...