您的位置:首页 > 编程语言 > C语言/C++

《C++核心思想》学习笔记(2)

2015-08-14 16:45 288 查看
第六章 类

1、getline(cin,next_name);

getline()函数从输入中读取一行文本,包括行尾的换行字符,也随即结束读取,然后把除换行字符之外的所有字符存入next_name。它是读入到换行符r结束,并且抛弃换行符,

>>运算符会忽略掉所有的空白字符(即空格、制表符、换行符)直到非空字符为止,它不会再读入后面的字符,通常是换行符。

★注:在不明确输入内容的情况下,最好使用getline。但是在cin>>运算后接着调用getline函数,需要在cin>>的后面插入一下代码:

string remainder;

getline(cin,remainder);

来忽略最后的换行符,以便让再后续的getline函数读取下一个输入行。

2、在C++中,所有的访问成员函数都应该使用const关键字来声明(注意:访问成员函数是指不修改隐式参数的成员函数)

3、设置构造函数的目的是为初始化对象的数据成员。一般来说,在构造对象时,除了数值成员必须在构造函数中赋值以外,所有类类型的数据成员都会被自动初始化。

4、在类中,考虑类的大小时,要注意字节对齐问题!

5、应该将共享的常量放到头文件中。

6、为了使用非成员函数,应该将函数原型的声明放到头文件中,而将函数的定义放到源文件中。

7、extern!慎用!

8、当包含多个类,且存在类的关联时,要注意类定义的次序;

9、类的私有成员在类的作用域内 是可以访问的。类的对象是不能访问类的私有数据成员的,只有通过类的成员函数才可以访问类的私有数据。在类的成员函数中,是可以通过类的对象访问私有成员的。

 

第十一章 继承

1、通过继承,可以在已有类的基础上扩充定义新的类;

2、通过多态,既可以充分利用相关类之间的共性,又可以赋予每个类各自的灵活性并实现特定的行为。

3、在派生类定义中一个常见的错误:忘记在派生类名后的冒号后面加上关键字public!在实际程序中,很少会使用到私有继承。事实上,私有继承违背了继承机制的初衷——派生类对象拥有基类对象的功能。

4、带有基类构造函数的派生类构造函数的定义:

Derived_class_name::Derived_class_name(expresions)

{    Statements;     }

Eg;

Manager::Manager(string name,double salary,string dept)

:Employee(name,salary)

{

Department = dept;

}

目的:在派生类构造函数的函数体执行之前,通过基类构造函数初始化基类数据成员。

5、(p318)★实验程序!

 


6、

 


7、

 


★当从派生类中调用基类成员函数,而同时在派生类中存在同名函数,则调用时一定要为基类成员函数指明类名!

8、如果要通知编译程序某个函数为动态绑定,则该函数名前必须加上virtual关键字。

★注:关键字virtual必须使用在基类中。其派生类所有与之同名并且有相同类型参数的函数自动地成为虚函数。尽管如此,在派生类中将隐含的虚函数冠以virtual标记被视为一种好的习惯!

9、定义一个虚函数,即可以在派生类中重新定义的动态绑定函数。当被调用时,根据其隐式参数的实际类型来确定所执行的函数。

★注意:关键字virtual只能使用在函数声明中,而不能使用在函数定义中。

10、C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言。我们今天就会为大家详细介绍其中C++多态性的一些基本知识,以方便大家在学习过程中对此能够有一个充分的掌握。

多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphism),字面意思多种形状。

C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖(override),或者称为重写。(这里我觉得要补充,重写的话可以有两种,直接重写成员函数和重写虚函数,只有重写了虚函数的才能算作是体现了C++多态性)而重载则是允许有多个同名的函数,而这些函数的参数列表不同,允许参数个数不同,参数类型不同,或者两者都不同。编译器会根据这些函数的不同列表,将同名的函数的名称做修饰,从而生成一些不同名称的预处理函数,来实现同名函数调用时的重载问题。但这并没有体现多态性。

多态与非多态的实质区别就是函数地址是早绑定还是晚绑定。如果函数的调用,在编译器编译期间就可以确定函数的调用地址,并生产代码,是静态的,就是说地址是早绑定的。而如果函数调用的地址不能在编译器期间确定,需要在运行时才确定,这就属于晚绑定。

那么多态的作用是什么呢,封装可以使得代码模块化,继承可以扩展已存在的代码,他们的目的都是为了代码重用。而多态的目的则是为了接口重用。也就是说,不论传递过来的究竟是那个类的对象,函数都能够通过同一个接口调用到适应各自对象的实现方法。

最常见的用法就是声明基类的指针,利用该指针指向任意一个子类对象,调用相应的虚函数,可以根据指向的子类的不同而实现不同的方法。如果没有使用虚函数的话,即没有利用C++多态性,则利用基类指针调用相应的函数的时候,将总被限制在基类函数本身,而无法调用到子类中被重写过的函数。因为没有多态性,函数调用的地址将是一定的,而固定的地址将始终调用到同一个函数,这就无法实现一个接口,多种方法的目的了。

第十三章 面向对象程序设计

1、尽量提高类的内聚性,并降低类见的耦合度;

2、类之间的关联关系通常是通过类的数据成员来具体实现;

(1)关联双方的重数:

A.一对多:需要在相应的类中存储关联类的一个对象向量;

B.一对一或0(p295)(在此利用了指针的一个优点,可以表示出一个对象中可能引用1个或0个另一个对象。)、对象共享(296、297)(指针在构造多个不同的共享变量共享同一种对象的这种“n对1”关系模型时极为有用!)、多态情况(即所引用的对象可能属于某一个基类,或其派生类。<指针的另一用法:一个指针可以指向不同类型的对象>):必须使用指针;

3、如果一个程序中包含了多个类,则需要注意编译程序识别类定义的先后次序。

4、

Product::Product()
{
price = 0;
}

Product::Product(string name,double p)
{
product_name = name;
price = p;
}
带参数的构造函数与不带参数的默认构造函数的区别(各自的作用)!!!!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++