因为C++的三大特性之一是数据隐藏,成员变量都是私有的,所以类不能像结构那样直接初始化,而需要构造函数,将需要初始化的数据在对象中实现初始化。构造函数与其他函数不同,没有返回值,也不能被对象调用(只是用于对象的初始化)。实质是类的隐式初始化,在对象初始化的时候,自动被调用。
构造函数可以分为一般的构造函数(分有参和无参)和用于对象复制的复制构造函数(又称拷贝构造函数)。
使用new来创建对象的时候,对象实际上没有名称,得到一个指向对象地址的指针,可以通过该指针管理对象。
#include <iostream>
using namespace std;
class Test
{
public:
Test() //无参构造函数,也叫默认构造函数,如果形参列表不为空且每个形参都有默认值,则也称为默认构造函数
{
cout<<"struct1 of Test!"<<endl;
}
Test(const Test &another) //拷贝构造函数
{
m_a=another.m_a;
cout<<"struct2 of Test!"<<endl;
}
Test(int a) :m_a(a) //有参构造函数,非默认构造函数,如果参数列表中所有的形参都有默认值,则是默认构造函数
{
m_a = a;
cout<<"struct3 of Test!"<<endl;
}
void print()
{
cout << " m_a = " << m_a << endl;
}
private:
int m_a;
}; void main() { Test t1(10); //括号法 //c++编译器自动调用这个类的有参构造函数 t1.print(); Test t2 = 20; //等号法 //c++编译器自动调用这个类的有参构造函数 t2.print(); Test t3=Test(30); //手工法 //程序员手工的调用构造函数 进行对象初始化 t3.print();}
当且仅当没有任何构造函数时,编译器才会提供默认构造函数,一旦用户定义了非默认构造函数而不提供默认的构造函数,试图使用默认构造形式初始化对象时,会导致错误(编译器不再提供默认构造函数)。
C++11中的列表初始化
C++11标准支持的列表初始化,需要提供与某个构造函数的参数列表匹配的内容,并将其括起来即可。
Test test = {"test construct", 0, 0.0}; //匹配Test::Test(const tring &str, int a, double b)
Test test = {"test const"}; //匹配Test::Test(const string &str, int a, double b)
Tets test = {}; //匹配Test::test()
const成员函数
类方法结尾加上const修饰符后成为const成员函数,在C++的规则中,当方法不修改调用对象时,最好将其声明为const型的。试图用一个const型的对象调用一个非const型的成员函数会被编译器报告错误,因为编译器不能保证该方法不会改变调用对象。
this指针
原文链接: https://www.cnblogs.com/ingy0923/p/8647800.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/271098
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!