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)的更多相关文章

  1. 《新标准C++程序设计》4.5(C++学习笔记15)

    实例:长度可变的整型数组类 int main() { //要编写可变长整型数组类,使之能如下使用: CArray a; //开始里的数组是空的 ; i < ; ++i) a.push_back( ...

  2. 《新标准C++程序设计》4.6(C++学习笔记16)

    重载流插入运算符和流提取运算符 流插入运算符:“<<” 流提取运算符:“>>” cout 是在 iostream 中定义的,ostream 类的对象. “<<” 能 ...

  3. 《新标准C++程序设计》4.4(C++学习笔记14)

    运算符重载为友元函数 一般情况下,将运算符重载为类的成员函数,是较好的选择. 但有时,重载为成员函数不能满足使用要求,重载为普通函数,又不能访问类的私有成员,所以需要将运算符重载为友元. class ...

  4. 《新标准C++程序设计》4.1(C++学习笔记12)

    运算符重载的概念和原理 一.运算符重载的需求 C++预定义的“+.-. * ./.%. ^ .&.~.!.|. = .<< >>.!= ”等运算符,只能用于基本数据类型 ...

  5. 《新标准C++程序设计》3.8(C++学习笔记10)

    友元 友元分为友元函数和友元类两种. 一.友元函数 在定义一个类的时候,可以把一些函数(包括全局函数和其它类的成员函数)声明为“友元”,这样那些函数就成为该类的友元函数,在友元函数内部就可以访问该类对 ...

  6. 《新标准C++程序设计》3.5(C++学习笔记8)

    常量对象和常量成员函数 一.常量对象 如果希望某个对象的值初始化后就再也不被改变,则定义该对象时可以在前面加const关键字,使之成为常量对象. class CDemo { private: int ...

  7. 正确处理类的复合关系------新标准c++程序设计

    假设要编写一个小区养狗管理程序,该程序需要一个“主人”类,还需要一个“狗”类.狗是有主人的,主人也有狗.假定狗只有一个主人,但一个主人可以有最多10条狗.该如何处理“主人”类和“狗”类的关系呢?下面是 ...

  8. 在成员函数中调用虚函数(关于多态的注意事项)------新标准c++程序设计

    类的成员函数之间可以互相调用.在成员函数(静态成员函数.构造函数和析构函数除外)中调用其他虚成员函数的语句是多态的.例如: #include<iostream> using namespa ...

  9. 多态实现的原理------新标准c++程序设计

    “多态”的关键在于通过基类指针或引用调用一个虚函数时,编译时不确定到底调用的是基类还是派生类的函数,运行时才确定.例子: #include<iostream> using namespac ...

  10. 多态的作用-游戏编程展示------新标准c++程序设计

    游戏软件的开发最能体现面向对象设计方法的优势.游戏中的人物.道具.建筑物.场景等都是很直观的对象,游戏运行的过程就是这些对象相互作用的过程.每个对象都有自己的属性和方法,不同对象也可能有共同的属性和方 ...

随机推荐

  1. keras人工神经网络构建入门

    //2019.07.29-301.Keras 是提供一些高度可用神经网络框架的 Python API ,能帮助你快速的构建和训练自己的深度学习模型,它的后端是 TensorFlow 或者 Theano ...

  2. 【转】深入分析JAVA IO(BIO、NIO、AIO)

    IO的基本常识 1.同步 用户进程触发IO操作并等待或者轮询的去查看IO操作是否完成 2.异步 用户触发IO操作以后,可以干别的事,IO操作完成以后再通知当前线程继续处理 3.阻塞 当一个线程调用 r ...

  3. greenplum 存储过程 函数

    参考:https://docs.pivotal.io/search?q=function

  4. c语言查漏补缺

    getchar:执行getchar()函数时,首先从输入缓存区读取字符,直到输入缓存区为空时才等待从键盘继续输入.scanf()之间不要有printf操作. 逗号表达式 a= (++a,1,2),只取 ...

  5. 从零开始学C++(2 字符串、向量和数组)

    可以说string和vector是C++标准库中最重要的两种类型,string支持可变长字符串,而vector表示可变长的集合. string 头文件:<string> 定义在命名空间 s ...

  6. 简述DDD,战略设计

    从What.How.Why三个层面进行了梳理. What:DDD是什么?DDD是用来解决软件复杂度的问题,是一种软件思想. Why:为什么DDD可以解决软件复杂度?对于规模造成的复杂度,可以借助限界上 ...

  7. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-upload

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  8. mybatis插入数据后将其ID返回

    背景 mybatis没有关联保存的功能,所以主从表需要分开保存,这就涉及到主表保存后要再次获取主表ID的环节,以下介绍mybatis插入数据后返回其自增ID的两种方式 方案 1.sql获取 <i ...

  9. springcloud--ruul(路由网关)

    Zuul的主要功能就是路由转发和过滤器 实例: 1:添加依赖pom.xml: <dependencies> <dependency> <groupId>org.sp ...

  10. 官网英文版学习——RabbitMQ学习笔记(八)Remote procedure call (RPC)

    在第四篇学习笔记中,我们学习了如何使用工作队列在多个工作者之间分配耗时的任务.   但是,如果我们需要在远程计算机上运行一个函数并等待结果呢?这是另一回事.这种模式通常称为远程过程调用或RPC.   ...