C++的一些知识点摘抄(创建基本类 高级类)
问:对象有多大?
答:对象占据的内存量取决于其成员变量的长度,类函数不占据为对象分配的内容。
有些编译器在内存中对齐变量,这导致2字节变量实际占用的内存多于2字节。
问:为何不应将所有成员数据声明为公有的?
答:通过将成员数据声明为私有的,可以让类的使用者能够使用这些数据,同时不必担心他们是如何存储和计算的。例如在三轮车类Tricylce有成员函数getspeed(),Tricycle类的使用者可请求获得三轮车的速度,而无需知道速度是存储在成员变量中还是动态计算得到的。公有数据类似于全局数据,任何对象的代码都可以访问它,因此如果这些数据被修改,通常会很难确定这些数据的修改是在哪里进行的。
const成员函数:
void displayPage() const; //在函数括号后面添加关键字const 可以将成员函数声明成常量函数,其表明它不会修改任何类成员的值。
内联实现
可将常规函数声明为类联的,同样也可将成员函数声明成内联的,为此需要在返回类型前面指定关键字inline, 如下代码
inline int Tricycle::getSpeed()
{
return speed;
}
也可将函数定义放在类声明中,这样函数将自动变成内联的,如下例所示:
class Tricycle
{
public:
int getSpeed() const
{
return speed;
}
void setSpeed(int newSpeed);
}
将其他类用作成员数据的类
如一个矩形Rectangle类中我们可以使用点Point类。
class Point
{
public: // 一些需要的函数和成员变量
private:
//一些需要的函数和成员变量
};
class Rectangle
{
public:
//一些需要的函数和成员变量
void setUpperLeft(Point location);
void setUpperRight(Point location);
... private:
Point upperLeft;
Point upperRight;
Point lowerLeft;
Point lowerRight;
int top;
int left;
int bottom;
int right;
};
问:既然使用常量函数修改类会导致编译器错误,为何不删除关键字const?这样可以确保不会发生错误。
答:从逻辑上讲,某个函数不应该修改类,则使用const关键字很不错,因为这杨,如果我们不小心在这个函数中修改了成员变量的值,编译器会帮助我们发现愚蠢的错误。
C++的一些知识点摘抄(创建基本类 高级类)的更多相关文章
- C#高级知识点&(ABP框架理论学习高级篇)——白金版
前言摘要 很早以前就有要写ABP高级系列教程的计划了,但是迟迟到现在这个高级理论系列才和大家见面.其实这篇博客很早就着手写了,只是楼主一直写写停停.看看下图,就知道这篇博客的生产日期了,谁知它的出厂日 ...
- 基于NSString处理文件的高级类
基于NSString处理文件的高级类 我已经把处理文件的类简化到了变态的程度,如果你还有更简洁的方法,请告知我,谢谢! 使用详情: 源码: // // NSString+File.h // Maste ...
- Scala类型系统——高级类类型(higher-kinded types)
高级类类型就是使用其他类型构造成为一个新的类型,因此也称为 类型构造器(type constructors).它的语法和高阶函数(higher-order functions)相似,高阶函数就是将其它 ...
- php面向对象的基础:创建OOP的类和字段
类的创建 class Computer{ //类的字段(成员) //类的方法 } 对象的声明 $computer = new Computer(); new标识符是为了在内存中创建一个对象(实例),而 ...
- C#创建和初始化类
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace C_编辑 ...
- JAVA类的创建: 创建JAVA的类 ,JAVA的字段,JAVA类的方法
1. 创建Java的类 如果说Java的一切都是对象,那么类型就是决定了某一类对象的外观与行为.可是类型的关键字不是type,而是class,创建一个新的类型要用下面的代码: 1 2 3 class ...
- IDEA 创建包和类及基本操作
创建包和类步骤如下: 1. 展开创建的工程,在源代码目录 src 上,鼠标右键,选择 new->package ,键入包名 com.itheima.demo ,点击确定. 2. 在创建好的包上, ...
- Java高级类特性(一)
一.继承性 1)继承的使用:权限修饰符 class A extends B{}:2)子类:A 父类(基类 SuperClass):B3)子类继承父类后,父类中声明的属性.方法,子类都可以获取到明确:当 ...
- Python 创建和使用类
python创建和使用类的方法如下 # class Dog(): # def __init__(self,name,age): # self.name=name # self.age=age # # ...
随机推荐
- Web API 源码剖析之默认消息处理程序链--》路由分发器(HttpRoutingDispatcher)
我们在上一节讲述了默认的DefaultServer(是一个类型为HttpServer的只读属性,详情请参考 Web API 源码剖析之全局配置).本节将讲述DefaultHandler(是一个Http ...
- todolist_高级写法
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" conten ...
- jenkins之构建触发器
build whenever a snapshot dependency is built 当job依赖的快照版本被build时,执行本job. build after other projects ...
- mysql之SQLYog配置
SQLyog(MySQL图形化开发工具) 安装: 提供的SQLyog软件为免安装版,可直接使用 使用: 输入用户名.密码,点击连接按钮,进行访问MySQL数据库进行操作
- python爬虫 发送定时气象预报
python爬取天气情况 下面为示例代码: from urllib.request import urlopen from bs4 import BeautifulSoup from urllib.e ...
- Seetaface 向树莓派 移植
seetaface由中科院计算所山世光研究员带领的人脸识别研究组研发.代码基于C++实现,不依赖第三方库.然而,目前开源的代码,是在windows vs上编译的,对于我们这帮mac/linux用户来说 ...
- Filter的连接过程《转》
原文地址:https://yq.aliyun.com/articles/48113 7.Filter的连接过程 DirectShow提供了多方法来连接Filter,如IFilterGraph::Con ...
- Maven(六) eclipse 使用Maven deploy命令部署构建到Nexus
转载于:http://blog.csdn.net/jun55xiu/article/details/43051627 1 应用场景:SYS-UTIL(系统工具)项目部署.构建成JAR包(SYS-UT ...
- 实例: Java代码操作oracle数据库(JDBC+sevrlet+jsp+html)
1, 注册页面 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.or ...
- DNS开源服务器BIND最小配置详解
一,简介 相对于存储和大数据领域,CDN是一个相对小的领域,但行行出状元,BIND就是CDN领域的蝉联N届的状元郎.BIND是一款非常常用的DNS开源服务器,全球有90%的DNS用BIND实现.值得一 ...