C++ 网页学习

C语言中文网

1.2

C中struct和C++中class区别,class有成员函数。

实例化

用类创建对象,称作类的实例化,这个对象也称作类的实例(instance)


类的成员有时称类的属性, property,成员函数有时称方法, method

面向对象编程

Object Oriented Progremming, OOP.

1.4

定义名称空间用namespace关键字。

namespace Zhou{
    Int own = 10000;
}

域解析操作符

::, 用来指明要使用的名称空间。

using Zhou::own;    #声明名称空间中的一个变量
using namespace Zhou;   #声明整个名称空间

中大型程序开发不推荐把名称空间声明在外部,这样会增加命名冲突的风险。

1.8

C++布尔类型

bool类型,一般长度占1个字节,有两个值truefalse, true代表真,false代表假。

可以使用true和false显式赋值:

bool flag = true;

2.3

成员访问限定符

public``protected``private, 分别表示公有的,受保护的,私有的,被称为成员访问限定符。

访问权限,就是指你能不能使用该类中的成员。

成员函数的定义和声明一般也会分开。

publicprivate的理解。

public指可以通过对象进行访问和修改,你可以在类外使用public定义的成员。

private指不能够使用对象访问和修改,你不能在类外使用,只有在类那个大括号内,才能使用private成员。

可以使用public的成员函数修改private的成员。

成员变量大都以m_开头,这是约定俗成的写法。以m_开头可以一眼看出这是成员变量,又可以和成员函数中的形参名字区别开。

声明为protected,则只能在派生类内部可以使用。

给成员变量赋值的函数通常称为set函数,他们的名字通常以set开头。

读取成员变量的值的函数通常称get函数,他们的名字通常以get开头, 然后根跟成员变量的名字。

类的封装性
这种将成员变量声明为private,将部分成员函数声明为public的做法。

声明为public和private的顺序任意,若没有public和private关键词,则默认为private

2.6

构造函数

名称和类相同,没有返回值,在创建对象时自动执行。

想要调用构造函数,就得在创建对象时传递实参。

构造函数必须是public属性,不然无法调用。

构造函数不允许出现返回值和return。

构造函数的重载
一个类可以有多个重载的构造函数。

构造函数的调用是强制性的,一旦在类中定义了构造函数,那么创建对象是就一定要调用.

默认构造函数
用户没有自己定义构造函数时,由编译器自动生成。

调用没有参数的构造函数时可以省略括号。

初始化列表
格式:

Stedunt::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){
...
}

使用构造函数列表仅仅是书写方便。

初始化const成员变量的唯一方法是使用初始化列表。

析构函数

destructor,一种特殊的成员函数,没有返回值,在销毁对象时自动执行。

析构函数的名字是在类名前面加一个~符号。

析构函数没有参数,不能被重载,,因此一个类只能有一个析构函数。

C中的malloc()和free()与C++中的new()和delete()的区别
用new分配内存时会调用构造函数,用delete释放内存时会调用析构函数。

创建于堆区的对象需要手动delete,


参考


析构函数,如果我们不自己写,编译器会自动生成一个,但什么都不会干。

全局区的对象在程序一开始创建,程序结束时才会被销毁。栈区的对象在调用函数时才创建,在函数结束时销毁,在堆中开辟空间创建的对象必须手动delete。

2.11

C++ this指针

this是C++关键字,代表一个const指针,指向当前对象,可以通过它访问对象的成员。

this只能用在类内部,通过this可以访问类的所有成员,包括public,protected,private。


参考


重载运算符 operator

关键字operator,重载操作符。

和运算符如=一起使用。

用来重载一个运算符,运算符就是< , >, =, 这一类。让它可以作用于类上。

例子:

bool operator= (int value) {
. . .
}

和定义函数一样,前面的bool是返回值类型,operator=相当于函数名,(int value)是参数列表,{...}是函数主体。这个就是重载了等号=.

一个具体的例子:

#   这里operator>为成员函数类懒得写了。
bool operator> (int value) {
if (this->own > value)
    return ture;
else 
    return false;
}

int main(void)
{
    person p1(10);
    if (person > 5)
        printf(“He has a lot of money!”);
    .
    .
    .
}

#这里的person会自动调用重载后的>,也就是函数operator>, 然后5就是传入的实参。

也可以把重载运算符函数声明为非成员函数。

C++要求,‘=’,‘[]’,’()’,’->’运算符必须被定义为成员函数。

几点限制:

  • 实现运算符重载时,需要注意以下几点:
  • 重载后运算符的操作数至少有一个是用户定义的类型;
  • 不能违反运算符原来的语法规则;
  • 不能创建新的运算符;
  • 有一些运算符是不能重载的,如“sizeof”;
  • =、()、[]、-> 操作符只能被类的成员函数重载。

4.1

C++继承和派生

继承, inheritance, 就是一个类从另一个类中获取成员函数和成员变量。

派生, derive, 和继承是一个概念。

父类和子类一般搭配称呼。

基类和派生类一般搭配称呼。

派生类可以定义自己的新成员。

语法格式:

class Student: public People {
. . .
}

三种继承方式

有三种继承方式,public,private,protected,默认为private。

类成员访问权限的高低:
public &rarr; protected &rarr; private

protected的变量可以在派生类中使用。

继承方式中的public,protected,private是指明基类成员在派生类中的最高访问权限

protected的成员也不能通过对象访问。

实际开发中一般使用public

在派生中访问基类的private成员的唯一方法就是借助基类的非private的成员函数。

改变权限

可以使用using改变权限。

C++继承时名字遮蔽问题

如果派生类中的成员和基类中的成员重名,那么就会遮蔽从基类继承过来的成员。

此时访问基类的成员就要使用类名和域解析符::

基类成员函数和派生类成员函数不构成重载.

5.1

C++多态和虚函数

基类的指针只能用来访问派生类的成员变量,但不能访问派生类的成员函数。

为了让基类指针能够访问派生类的成员函数,C++新增了虚函数,vitual function。

关键词virtual.

有了虚函数之后,基类指针指向基类对象时就能使用基类的成员,指向派生类时就能够使用派生类的成员。

换句话说,基类指针既能够按照基类的方式做事,又能够按照派生类的方式来做事,它有多种形态,或者说多种表现方式,我们将这种现象称为多态,Polymorphism

也就是虚函数是实现多态的一种方式。

多态是面向对象编程的主要特征之一.


C++ 网页学习
http://example.com/2022/08/25/C++ 网页学习/
作者
Jie
发布于
2022年8月25日
许可协议