初学C++需要着重理解的点

  1. 关于const
  2. 关于类的构造函数和析构函数
  3. 关于类的this指针
  4. 操作符的重载,以及重载的限制
  5. c++中的友元
  6. c++的多态

只要类的方法不修改调用对象,就将其声明为const;将const的引用和指针作为形参可以提高代码的效率。

void show() const;
void stock::show() const;//

类的构造函数,类的成员函数可以访问类的私有成员,私有的数据成员对外面的程序是隐藏的。c++中类方法和友元是表达类接口的两种不同的机制。构造函数就是为了在创建对象的时候,方便给对象进行初始化。

//构造函数有两个参数的时候,对象的初始化的三种方式
Bozo (const char * fname,const char* lname);
Bozo bozetta = Bozo ("Bozetta","Biggens");
Bozo fufu("Fufu","O'Dweeb");
Bozo *pc = new Bozo("Popo","Le Peu");
//一个参数的时候
Bozo (int age);
Bozo dribble = bozo;
Bozo roon (66);
Bozo tubby = 32;

析构函数一般是没有参数的,对象会在程序的最后自动调用析构函数。如果在构造函数中有new,那么在析构函数中一定要delete,不然会造成严重的后果——内存泄漏。

有时候成员函数涉及到两个对象,在这种情况之下需要使用c++ 的this指针。

//类方法的声明
const stock & topval(const stock &s)const;//句尾的const是保证隐式对象的常性
//类方法的定义
const stock & stock::topval(const stock &s)const
{
    if(s.total_val > total_val)
        return s;
    else
        return *this;
/*this指针指向用来调用成员函数的对象(this被作为隐藏的参数传递给方法)。一般来说,所有类的方法都将this指针设置为调用过它的对象的地址。*this即调用成员函数的对象

}

运算符重载,为了使自定义的数据类型,可以和基本数据类型一样地进行运算,用操作符函数来重新定义。

operator op (argument-list)//操作符函数

重载的限制:

  • 重载不一定是成员函数,但必须保证有一个操作数是用户定义类型
  • 重载操作符不能违反操作符原来的句法原则和操作符的优先级
  • 不能定义新的操作符
  • 不能重载下面的操作符:sizeof | . | .* | :: | ?: | typeid | const_const | dynamic_const | reinterpret_const | static_const |
  • 用成员函数重载的运算符: = , ( ) , [ ] , ->

不要返回指向局部变量或是临时变量的引用:

class Time
{}:
//返回Time类型的对象,将创建的对象拷贝;传time类型的引用,可以提高效率。
Time Time::Sum(const Time &t) const
{
    Time sum;
    sum.minutes = minutes + t.minutes;
    sum.hours = hours + t.hours + sum.minutes/60;
    sum.minutes % = 60;
    return sum;
/*如果函数的返回值是Time&,则将引用的是sum对象。由于sum对象是个临时变量,在函数结束时将被删除,此时引用将会指向一个不存在的对象*/
}

c++中的友元:友元函数,友元类,友元成员函数。非成员函数想要访问类的数据成员,可以通过友元函数的形式来访问,其权限与类中的成员函数是一致的。

一般来说,要重载"<<"操作符来显示c_name对象,可以使用一个友元函数来实现。

ostream & operator <<(ostream &os,const c_name &obj)
{
    os<<...;//display object contents
    return os;
}

C++的多态性:(1)编译时多态:包括函数名(操作符)的重载.(2)运行时多态:通过派生类和虚函数来实现。

ps:一个类中,若有一个纯虚函数,那么它就是个抽象类。抽象类不能实例化(因为抽象类中至少有一个函数没有实现),则该基类中的任何派生类都必须自定义实现。“vitual”函数是在运行时候才确定的而不是在编译的时候确定。

类模板实例化后的产物就是模板类,类模板的使用格式:类名(实际类型)。

C++中的参数传递,可以用应用的方式传递参数。当把一个体积较大的对象作为参数传递时,使用引用的方式将大大节省传递参数的时间,并可以节省存储参数对象的副本空间。

C++的输入输出格式是自由的。struct的默认访问级别是public,class的默认访问级别是private。

猜你喜欢

转载自blog.csdn.net/qq_35353824/article/details/87967691